diff --git a/README_8md_source.html b/README_8md_source.html deleted file mode 100644 index 342a40853..000000000 --- a/README_8md_source.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - -EnTT: README.md Source File - - - - - - - - - -
-
- - - - - - -
-
EnTT -  3.2.1 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
README.md
-
-
-
1 ![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/1812216/42513718-ee6e98d0-8457-11e8-9baf-8d83f61a3097.png)
2 
3 <!--
4 @cond TURN_OFF_DOXYGEN
5 -->
6 [![GitHub version](https://badge.fury.io/gh/skypjack%2Fentt.svg)](https://github.com/skypjack/entt/releases)
7 [![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)](https://github.com/skypjack/entt/actions)
8 [![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.svg)](https://codecov.io/gh/skypjack/entt)
9 [![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://godbolt.org/z/v8txVr)
10 [![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.im/skypjack/entt)
11 [![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.paypal.me/skypjack)
12 [![Patreon](https://img.shields.io/badge/become-patron-red.svg)](https://www.patreon.com/bePatron?c=1772573)
13 
14 `EnTT` is a header-only, tiny and easy to use library for game programming and
15 much more written in **modern C++**, mainly known for its innovative
16 **entity-component-system (ECS)** model.<br/>
17 [Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's used
18 in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang and the
19 [**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by
20 Esri. Open an issue or submit a PR if you don't see your project in the list!
21 
22 ---
23 
24 Do you want to **keep up with changes** or do you have a **question** that
25 doesn't require you to open an issue?<br/>
26 Join the [gitter channel](https://gitter.im/skypjack/entt) and meet other users
27 like you. The more we are, the better for everyone.
28 
29 Wondering why your **debug build** is so slow on Windows or how to represent a
30 **hierarchy** with components?<br/>
31 Check out the
32 [FAQ](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and the
33 [wiki](https://github.com/skypjack/entt/wiki) if you have these or other doubts,
34 your answers may already be there.
35 
36 If you use `EnTT` and you want to say thanks or support the project, please
37 **consider becoming a
38 [sponsor](https://github.com/users/skypjack/sponsorship)**.<br/>
39 You can help me make the difference.
40 [Many thanks](https://skypjack.github.io/sponsorship/) to those who supported me
41 and still support me today.
42 
43 # Table of Contents
44 
45 * [Introduction](#introduction)
46  * [Code Example](#code-example)
47  * [Motivation](#motivation)
48  * [Performance](#performance)
49 * [Build Instructions](#build-instructions)
50  * [Requirements](#requirements)
51  * [Library](#library)
52  * [Documentation](#documentation)
53  * [Tests](#tests)
54 * [Packaging Tools](#packaging-tools)
55 * [EnTT in Action](#entt-in-action)
56 * [Contributors](#contributors)
57 * [License](#license)
58 * [Support](#support)
59 <!--
60 @endcond TURN_OFF_DOXYGEN
61 -->
62 
63 # Introduction
64 
65 The entity-component-system (also known as _ECS_) is an architectural pattern
66 used mostly in game development. For further details:
67 
68 * [Entity Systems Wiki](http://entity-systems.wikidot.com/)
69 * [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/)
70 * [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E2%80%93system)
71 
72 This project started off as a pure entity-component system. Over time the
73 codebase has grown as more and more classes and functionalities were added.<br/>
74 Here is a brief, yet incomplete list of what it offers today:
75 
76 * Statically generated integer **identifiers** for types (assigned either at
77  compile-time or at runtime).
78 * A `constexpr` utility for human readable **resource names**.
79 * A minimal **configuration system** built using the monostate pattern.
80 * An incredibly fast **entity-component system** based on sparse sets, with its
81  own _pay for what you use_ policy to adjust performance and memory usage
82  according to the users' requirements.
83 * Views and groups to iterate entities and components and allow different access
84  patterns, from **perfect SoA** to fully random.
85 * A lot of **facilities** built on top of the entity-component system to help
86  the users and avoid reinventing the wheel (dependencies, snapshot, actor
87  class, support for **reactive systems** and so on).
88 * The smallest and most basic implementation of a **service locator** ever seen.
89 * A built-in, non-intrusive and macro-free runtime **reflection system**.
90 * A **cooperative scheduler** for processes of any type.
91 * All that is needed for **resource management** (cache, loaders, handles).
92 * Delegates, **signal handlers** (with built-in support for collectors) and a
93  tiny event dispatcher for immediate and delayed events to integrate in loops.
94 * A general purpose **event emitter** as a CRTP idiom based class template.
95 * And **much more**! Check out the
96  [**wiki**](https://github.com/skypjack/entt/wiki).
97 
98 Consider this list a work in progress as well as the project. The whole API is
99 fully documented in-code for those who are brave enough to read it.
100 
101 Currently, `EnTT` is tested on Linux, Microsoft Windows and OSX. It has proven
102 to work also on both Android and iOS.<br/>
103 Most likely it won't be problematic on other systems as well, but it hasn't been
104 sufficiently tested so far.
105 
106 ## Code Example
107 
108 ```cpp
109 #include <entt/entt.hpp>
110 #include <cstdint>
111 
112 struct position {
113  float x;
114  float y;
115 };
116 
117 struct velocity {
118  float dx;
119  float dy;
120 };
121 
122 void update(entt::registry &registry) {
123  auto view = registry.view<position, velocity>();
124 
125  for(auto entity: view) {
126  // gets only the components that are going to be used ...
127 
128  auto &vel = view.get<velocity>(entity);
129 
130  vel.dx = 0.;
131  vel.dy = 0.;
132 
133  // ...
134  }
135 }
136 
137 void update(std::uint64_t dt, entt::registry &registry) {
138  registry.view<position, velocity>().each([dt](auto &pos, auto &vel) {
139  // gets all the components of the view at once ...
140 
141  pos.x += vel.dx * dt;
142  pos.y += vel.dy * dt;
143 
144  // ...
145  });
146 }
147 
148 int main() {
149  entt::registry registry;
150  std::uint64_t dt = 16;
151 
152  for(auto i = 0; i < 10; ++i) {
153  auto entity = registry.create();
154  registry.assign<position>(entity, i * 1.f, i * 1.f);
155  if(i % 2 == 0) { registry.assign<velocity>(entity, i * .1f, i * .1f); }
156  }
157 
158  update(dt, registry);
159  update(registry);
160 
161  // ...
162 }
163 ```
164 
165 ## Motivation
166 
167 I started developing `EnTT` for the _wrong_ reason: my goal was to design an
168 entity-component system to beat another well known open source solution both in
169 terms of performance and possibly memory usage.<br/>
170 In the end, I did it, but it wasn't very satisfying. Actually it wasn't
171 satisfying at all. The fastest and nothing more, fairly little indeed. When I
172 realized it, I tried hard to keep intact the great performance of `EnTT` and to
173 add all the features I wanted to see in *my own library* at the same time.
174 
175 Nowadays, `EnTT` is finally what I was looking for: still faster than its
176 _competitors_, lower memory usage in the average case, a really good API and an
177 amazing set of features. And even more, of course.
178 
179 ## Performance
180 
181 The proposed entity-component system is incredibly fast to iterate entities and
182 components, this is a fact. Some compilers make a lot of optimizations because
183 of how `EnTT` works, some others aren't that good. In general, if we consider
184 real world cases, `EnTT` is somewhere between a bit and much faster than many of
185 the other solutions around, although I couldn't check them all for obvious
186 reasons.
187 
188 If you are interested, you can compile the `benchmark` test in release mode (to
189 enable compiler optimizations, otherwise it would make little sense) by setting
190 the `BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself whether
191 you're satisfied with the results or not.
192 
193 Honestly I got tired of updating the README file whenever there is an
194 improvement.<br/>
195 There are already a lot of projects out there that use `EnTT` as a basis for
196 comparison (this should already tell you a lot). Many of these benchmarks are
197 completely wrong, many others are simply incomplete, good at omitting some
198 information and using the wrong function to compare a given feature. Certainly
199 there are also good ones but they age quickly if nobody updates them, especially
200 when the library they are dealing with is actively developed.
201 
202 The choice to use `EnTT` should be based on its carefully designed API, its
203 set of features and the general performance, **not** because some single
204 benchmark shows it to be the fastest tool available.
205 
206 In the future I'll likely try to get even better performance while still adding
207 new features, mainly for fun.<br/>
208 If you want to contribute and/or have suggestions, feel free to make a PR or
209 open an issue to discuss your idea.
210 
211 # Build Instructions
212 
213 ## Requirements
214 
215 To be able to use `EnTT`, users must provide a full-featured compiler that
216 supports at least C++17.<br/>
217 The requirements below are mandatory to compile the tests and to extract the
218 documentation:
219 
220 * `CMake` version 3.2 or later.
221 * `Doxygen` version 1.8 or later.
222 
223 Alternatively, `Bazel` is also supported as a build system (credits to
224 [zaucy](https://github.com/zaucy) who introduced what's required with
225 [this](https://github.com/skypjack/entt/pull/291) pull request and offered to
226 maintain it).<br/>
227 In the documentation below I'll still refer to `CMake`, this being the official
228 build system of the library.
229 
230 If you are looking for a C++14 version of `EnTT`, check out the git tag `cpp14`.
231 
232 ## Library
233 
234 `EnTT` is a header-only library. This means that including the `entt.hpp` header
235 is enough to include the library as a whole and use it. For those who are
236 interested only in the entity-component system, consider to include the sole
237 `entity/registry.hpp` header instead.<br/>
238 It's a matter of adding the following line to the top of a file:
239 
240 ```cpp
241 #include <entt/entt.hpp>
242 ```
243 
244 Use the line below to include only the entity-component system instead:
245 
246 ```cpp
247 #include <entt/entity/registry.hpp>
248 ```
249 
250 Then pass the proper `-I` argument to the compiler to add the `src` directory to
251 the include paths.
252 
253 ## Documentation
254 
255 The documentation is based on [doxygen](http://www.doxygen.nl/).
256 To build it:
257 
258  $ cd build
259  $ cmake .. -DBUILD_DOCS=ON
260  $ make
261 
262 The API reference will be created in HTML format within the directory
263 `build/docs/html`. To navigate it with your favorite browser:
264 
265  $ cd build
266  $ your_favorite_browser docs/html/index.html
267 
268 <!--
269 @cond TURN_OFF_DOXYGEN
270 -->
271 It's also available [online](https://skypjack.github.io/entt/) for the latest
272 version.<br/>
273 Finally, there exists a [wiki](https://github.com/skypjack/entt/wiki) dedicated
274 to the project where users can find all related documentation pages.
275 <!--
276 @endcond TURN_OFF_DOXYGEN
277 -->
278 
279 ## Tests
280 
281 To compile and run the tests, `EnTT` requires *googletest*.<br/>
282 `cmake` will download and compile the library before compiling anything else.
283 In order to build the tests, set the CMake option `BUILD_TESTING` to `ON`.
284 
285 To build the most basic set of tests:
286 
287 * `$ cd build`
288 * `$ cmake -DBUILD_TESTING=ON ..`
289 * `$ make`
290 * `$ make test`
291 
292 Note that benchmarks are not part of this set.
293 
294 # Packaging Tools
295 
296 `EnTT` is available for some of the most known packaging tools. In particular:
297 
298 * [`Conan`](https://bintray.com/skypjack/conan/entt%3Askypjack/_latestVersion),
299  the C/C++ Package Manager for Developers.
300 
301 * [`vcpkg`](https://github.com/Microsoft/vcpkg/tree/master/ports/entt),
302  Microsoft VC++ Packaging Tool.<br/>
303  You can download and install `EnTT` in just a few simple steps:
304 
305  ```
306  $ git clone https://github.com/Microsoft/vcpkg.git
307  $ cd vcpkg
308  $ ./bootstrap-vcpkg.sh
309  $ ./vcpkg integrate install
310  $ vcpkg install entt
311  ```
312 
313  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
314  community contributors.<br/>
315  If the version is out of date, please
316  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
317  `vcpkg` repository.
318 
319 * [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
320  manager for macOS.<br/>
321  Available as a homebrew formula. Just type the following to install it:
322 
323  ```
324  brew install skypjack/entt/entt
325  ```
326 
327 Consider this list a work in progress and help me to make it longer.
328 
329 <!--
330 @cond TURN_OFF_DOXYGEN
331 -->
332 # EnTT in Action
333 
334 `EnTT` is widely used in private and commercial applications. I cannot even
335 mention most of them because of some signatures I put on some documents time
336 ago. Fortunately, there are also people who took the time to implement open
337 source projects based on `EnTT` and did not hold back when it came to
338 documenting them.
339 
340 [Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
341 incomplete list of games, applications and articles that can be used as a
342 reference.
343 
344 If you know of other resources out there that are about `EnTT`, feel free to
345 open an issue or a PR and I'll be glad to add them to the list.
346 
347 # Contributors
348 
349 `EnTT` was written initially as a faster alternative to other well known and
350 open source entity-component systems. Nowadays this library is moving its first
351 steps. Much more will come in the future and hopefully I'm going to work on it
352 for a long time.<br/>
353 Requests for features, PR, suggestions ad feedback are highly appreciated.
354 
355 If you find you can help me and want to contribute to the project with your
356 experience or you do want to get part of the project for some other reasons,
357 feel free to contact me directly (you can find the mail in the
358 [profile](https://github.com/skypjack)).<br/>
359 I can't promise that each and every contribution will be accepted, but I can
360 assure that I'll do my best to take them all seriously.
361 
362 If you decide to participate, please see the guidelines for
363 [contributing](CONTRIBUTING.md) before to create issues or pull
364 requests.<br/>
365 Take also a look at the
366 [contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
367 know who has participated so far.
368 <!--
369 @endcond TURN_OFF_DOXYGEN
370 -->
371 
372 # License
373 
374 Code and documentation Copyright (c) 2017-2019 Michele Caini.<br/>
375 Logo Copyright (c) 2018-2019 Richard Caseres.
376 
377 Code released under
378 [the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).
379 Documentation released under
380 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
381 Logo released under
382 [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).
383 
384 <!--
385 @cond TURN_OFF_DOXYGEN
386 -->
387 # Support
388 
389 If you want to support this project, you can
390 [offer me](https://github.com/users/skypjack/sponsorship) an espresso.<br/>
391 If you find that it's not enough, feel free to
392 [help me](https://www.paypal.me/skypjack) the way you prefer.
393 <!--
394 @endcond TURN_OFF_DOXYGEN
395 -->
- - - - diff --git a/actor_8hpp_source.html b/actor_8hpp_source.html index 196a4ae0a..7eb2a864b 100644 --- a/actor_8hpp_source.html +++ b/actor_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/entity/actor.hpp Source File @@ -22,7 +22,7 @@
EnTT -  3.2.1 +  3.2.2
@@ -30,18 +30,21 @@ - + +/* @license-end */
actor.hpp
-
1 #ifndef ENTT_ENTITY_ACTOR_HPP
2 #define ENTT_ENTITY_ACTOR_HPP
3 
4 
5 #include <cassert>
6 #include <utility>
7 #include <type_traits>
8 #include "../config/config.h"
9 #include "registry.hpp"
10 #include "entity.hpp"
11 #include "fwd.hpp"
12 
13 
14 namespace entt {
15 
16 
27 template<typename Entity>
28 struct basic_actor {
32  using entity_type = Entity;
33 
34  basic_actor() ENTT_NOEXCEPT
35  : entt{entt::null}, reg{nullptr}
36  {}
37 
42  explicit basic_actor(registry_type &ref)
43  : entt{ref.create()}, reg{&ref}
44  {}
45 
52  : entt{entity}, reg{&ref}
53  {
54  ENTT_ASSERT(ref.valid(entity));
55  }
56 
58  virtual ~basic_actor() {
59  if(*this) {
60  reg->destroy(entt);
61  }
62  }
63 
74  : entt{other.entt}, reg{other.reg}
75  {
76  other.entt = null;
77  }
78 
90  if(this != &other) {
91  auto tmp{std::move(other)};
92  std::swap(reg, tmp.reg);
93  std::swap(entt, tmp.entt);
94  }
95 
96  return *this;
97  }
98 
113  template<typename Component, typename... Args>
114  decltype(auto) assign(Args &&... args) {
115  return reg->template assign_or_replace<Component>(entt, std::forward<Args>(args)...);
116  }
117 
122  template<typename Component>
123  void remove() {
124  reg->template remove<Component>(entt);
125  }
126 
132  template<typename... Component>
133  bool has() const ENTT_NOEXCEPT {
134  return (reg->template has<Component>(entt) && ...);
135  }
136 
142  template<typename... Component>
143  decltype(auto) get() const ENTT_NOEXCEPT {
144  return std::as_const(*reg).template get<Component...>(entt);
145  }
146 
148  template<typename... Component>
149  decltype(auto) get() ENTT_NOEXCEPT {
150  return reg->template get<Component...>(entt);
151  }
152 
158  template<typename... Component>
159  auto try_get() const ENTT_NOEXCEPT {
160  return std::as_const(*reg).template try_get<Component...>(entt);
161  }
162 
164  template<typename... Component>
165  auto try_get() ENTT_NOEXCEPT {
166  return reg->template try_get<Component...>(entt);
167  }
168 
173  const registry_type & backend() const ENTT_NOEXCEPT {
174  return *reg;
175  }
176 
178  registry_type & backend() ENTT_NOEXCEPT {
179  return const_cast<registry_type &>(std::as_const(*this).backend());
180  }
181 
186  entity_type entity() const ENTT_NOEXCEPT {
187  return entt;
188  }
189 
194  explicit operator bool() const ENTT_NOEXCEPT {
195  return reg && reg->valid(entt);
196  }
197 
198 private:
200  registry_type *reg;
201 };
202 
203 
204 }
205 
206 
207 #endif // ENTT_ENTITY_ACTOR_HPP
decltype(auto) assign(Args &&... args)
Assigns the given component to an actor.
Definition: actor.hpp:114
-
virtual ~basic_actor()
Default destructor.
Definition: actor.hpp:58
-
bool has() const ENTT_NOEXCEPT
Checks if an actor has the given components.
Definition: actor.hpp:133
-
registry_type & backend() ENTT_NOEXCEPT
Returns a reference to the underlying registry.
Definition: actor.hpp:178
-
void destroy(const entity_type entity)
Destroys an entity and lets the registry recycle the identifier.
Definition: registry.hpp:682
-
EnTT default namespace.
Definition: algorithm.hpp:12
-
Entity entity_type
Underlying entity identifier.
Definition: actor.hpp:32
-
const registry_type & backend() const ENTT_NOEXCEPT
Returns a reference to the underlying registry.
Definition: actor.hpp:173
-
auto try_get() const ENTT_NOEXCEPT
Returns pointers to the given components for an actor.
Definition: actor.hpp:159
-
constexpr auto null
Compile-time constant for null entities.
Definition: entity.hpp:168
-
bool valid(const entity_type entity) const ENTT_NOEXCEPT
Checks if an entity identifier refers to a valid entity.
Definition: registry.hpp:500
-
Fast and reliable entity-component system.
Definition: fwd.hpp:13
-
basic_actor(registry_type &ref)
Constructs an actor from a given registry.
Definition: actor.hpp:42
-
auto try_get() ENTT_NOEXCEPT
Returns pointers to the given components for an actor.
Definition: actor.hpp:165
-
basic_actor(entity_type entity, registry_type &ref)
Constructs an actor from a given entity.
Definition: actor.hpp:51
-
basic_actor & operator=(basic_actor &&other)
Move assignment operator.
Definition: actor.hpp:89
-
basic_actor(basic_actor &&other)
Move constructor.
Definition: actor.hpp:73
-
decltype(auto) get() const ENTT_NOEXCEPT
Returns references to the given components for an actor.
Definition: actor.hpp:143
-
auto create()
Creates a new entity and returns it.
Definition: registry.hpp:565
-
Dedicated to those who aren&#39;t confident with the entity-component-system architecture.
Definition: actor.hpp:28
-
entity_type entity() const ENTT_NOEXCEPT
Returns the entity associated with an actor.
Definition: actor.hpp:186
+
1 #ifndef ENTT_ENTITY_ACTOR_HPP
+
2 #define ENTT_ENTITY_ACTOR_HPP
+
3 
+
4 
+
5 #include <cassert>
+
6 #include <utility>
+
7 #include <type_traits>
+
8 #include "../config/config.h"
+
9 #include "registry.hpp"
+
10 #include "entity.hpp"
+
11 #include "fwd.hpp"
+
12 
+
13 
+
14 namespace entt {
+
15 
+
16 
+
27 template<typename Entity>
+
28 struct basic_actor {
+ +
32  using entity_type = Entity;
+
33 
+
34  basic_actor() ENTT_NOEXCEPT
+
35  : entt{entt::null}, reg{nullptr}
+
36  {}
+
37 
+
42  explicit basic_actor(registry_type &ref)
+
43  : entt{ref.create()}, reg{&ref}
+
44  {}
+
45 
+ +
52  : entt{entity}, reg{&ref}
+
53  {
+
54  ENTT_ASSERT(ref.valid(entity));
+
55  }
+
56 
+
58  virtual ~basic_actor() {
+
59  if(*this) {
+
60  reg->destroy(entt);
+
61  }
+
62  }
+
63 
+ +
74  : entt{other.entt}, reg{other.reg}
+
75  {
+
76  other.entt = null;
+
77  }
+
78 
+ +
90  if(this != &other) {
+
91  auto tmp{std::move(other)};
+
92  std::swap(reg, tmp.reg);
+
93  std::swap(entt, tmp.entt);
+
94  }
+
95 
+
96  return *this;
+
97  }
+
98 
+
113  template<typename Component, typename... Args>
+
114  decltype(auto) assign(Args &&... args) {
+
115  return reg->template assign_or_replace<Component>(entt, std::forward<Args>(args)...);
+
116  }
+
117 
+
122  template<typename Component>
+
123  void remove() {
+
124  reg->template remove<Component>(entt);
+
125  }
+
126 
+
132  template<typename... Component>
+
133  bool has() const ENTT_NOEXCEPT {
+
134  return (reg->template has<Component>(entt) && ...);
+
135  }
+
136 
+
142  template<typename... Component>
+
143  decltype(auto) get() const ENTT_NOEXCEPT {
+
144  return std::as_const(*reg).template get<Component...>(entt);
+
145  }
+
146 
+
148  template<typename... Component>
+
149  decltype(auto) get() ENTT_NOEXCEPT {
+
150  return reg->template get<Component...>(entt);
+
151  }
+
152 
+
158  template<typename... Component>
+
159  auto try_get() const ENTT_NOEXCEPT {
+
160  return std::as_const(*reg).template try_get<Component...>(entt);
+
161  }
+
162 
+
164  template<typename... Component>
+
165  auto try_get() ENTT_NOEXCEPT {
+
166  return reg->template try_get<Component...>(entt);
+
167  }
+
168 
+
173  const registry_type & backend() const ENTT_NOEXCEPT {
+
174  return *reg;
+
175  }
+
176 
+
178  registry_type & backend() ENTT_NOEXCEPT {
+
179  return const_cast<registry_type &>(std::as_const(*this).backend());
+
180  }
+
181 
+
186  entity_type entity() const ENTT_NOEXCEPT {
+
187  return entt;
+
188  }
+
189 
+
194  explicit operator bool() const ENTT_NOEXCEPT {
+
195  return reg && reg->valid(entt);
+
196  }
+
197 
+
198 private:
+ +
200  registry_type *reg;
+
201 };
+
202 
+
203 
+
204 }
+
205 
+
206 
+
207 #endif // ENTT_ENTITY_ACTOR_HPP
+
auto create()
Creates a new entity and returns it.
Definition: registry.hpp:565
+
constexpr auto null
Compile-time constant for null entities.
Definition: entity.hpp:168
+
Entity entity_type
Underlying entity identifier.
Definition: actor.hpp:32
+
bool has() const ENTT_NOEXCEPT
Checks if an actor has the given components.
Definition: actor.hpp:133
+
basic_registry< Entity > registry_type
Type of registry used internally.
Definition: actor.hpp:30
+
bool valid(const entity_type entity) const ENTT_NOEXCEPT
Checks if an entity identifier refers to a valid entity.
Definition: registry.hpp:500
+
decltype(auto) get() const ENTT_NOEXCEPT
Returns references to the given components for an actor.
Definition: actor.hpp:143
+
entity_type entity() const ENTT_NOEXCEPT
Returns the entity associated with an actor.
Definition: actor.hpp:186
+
void destroy(const entity_type entity)
Destroys an entity and lets the registry recycle the identifier.
Definition: registry.hpp:682
+
virtual ~basic_actor()
Default destructor.
Definition: actor.hpp:58
+
basic_actor(registry_type &ref)
Constructs an actor from a given registry.
Definition: actor.hpp:42
+
basic_actor(entity_type entity, registry_type &ref)
Constructs an actor from a given entity.
Definition: actor.hpp:51
+
decltype(auto) assign(Args &&... args)
Assigns the given component to an actor.
Definition: actor.hpp:114
+
basic_actor & operator=(basic_actor &&other)
Move assignment operator.
Definition: actor.hpp:89
+
EnTT default namespace.
Definition: algorithm.hpp:12
+
auto try_get() const ENTT_NOEXCEPT
Returns pointers to the given components for an actor.
Definition: actor.hpp:159
+
auto try_get() ENTT_NOEXCEPT
Returns pointers to the given components for an actor.
Definition: actor.hpp:165
+
const registry_type & backend() const ENTT_NOEXCEPT
Returns a reference to the underlying registry.
Definition: actor.hpp:173
+
basic_actor(basic_actor &&other)
Move constructor.
Definition: actor.hpp:73
+
Fast and reliable entity-component system.
Definition: fwd.hpp:13
+
void remove()
Removes the given component from an actor.
Definition: actor.hpp:123
+
registry_type & backend() ENTT_NOEXCEPT
Returns a reference to the underlying registry.
Definition: actor.hpp:178
+
Dedicated to those who aren't confident with the entity-component-system architecture.
Definition: actor.hpp:28
diff --git a/algorithm_8hpp_source.html b/algorithm_8hpp_source.html index 45ad78759..4930dfb18 100644 --- a/algorithm_8hpp_source.html +++ b/algorithm_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/core/algorithm.hpp Source File @@ -22,7 +22,7 @@
EnTT -  3.2.1 +  3.2.2
@@ -30,18 +30,21 @@
- + +/* @license-end */
algorithm.hpp
-
1 #ifndef ENTT_CORE_ALGORITHM_HPP
2 #define ENTT_CORE_ALGORITHM_HPP
3 
4 
5 #include <utility>
6 #include <iterator>
7 #include <algorithm>
8 #include <functional>
9 #include "utility.hpp"
10 
11 
12 namespace entt {
13 
14 
23 struct std_sort {
37  template<typename It, typename Compare = std::less<>, typename... Args>
38  void operator()(It first, It last, Compare compare = Compare{}, Args &&... args) const {
39  std::sort(std::forward<Args>(args)..., std::move(first), std::move(last), std::move(compare));
40  }
41 };
42 
43 
57  template<typename It, typename Compare = std::less<>>
58  void operator()(It first, It last, Compare compare = Compare{}) const {
59  if(first < last) {
60  for(auto it = first+1; it < last; ++it) {
61  auto value = std::move(*it);
62  auto pre = it;
63 
64  for(; pre > first && compare(value, *(pre-1)); --pre) {
65  *pre = std::move(*(pre-1));
66  }
67 
68  *pre = std::move(value);
69  }
70  }
71  }
72 };
73 
74 
80 template<std::size_t Bit, std::size_t N>
81 struct radix_sort {
82  static_assert((N % Bit) == 0);
83 
99  template<typename It, typename Getter = identity>
100  void operator()(It first, It last, Getter getter = Getter{}) const {
101  if(first < last) {
102  static constexpr auto mask = (1 << Bit) - 1;
103  static constexpr auto buckets = 1 << Bit;
104  static constexpr auto passes = N / Bit;
105 
106  using value_type = typename std::iterator_traits<It>::value_type;
107  std::vector<value_type> aux(std::distance(first, last));
108 
109  auto part = [getter = std::move(getter)](auto from, auto to, auto out, auto start) {
110  std::size_t index[buckets]{};
111  std::size_t count[buckets]{};
112 
113  std::for_each(from, to, [&getter, &count, start](const value_type &item) {
114  ++count[(getter(item) >> start) & mask];
115  });
116 
117  std::for_each(std::next(std::begin(index)), std::end(index), [index = std::begin(index), count = std::begin(count)](auto &item) mutable {
118  item = *(index++) + *(count++);
119  });
120 
121  std::for_each(from, to, [&getter, &out, &index, start](value_type &item) {
122  out[index[(getter(item) >> start) & mask]++] = std::move(item);
123  });
124  };
125 
126  for(std::size_t pass = 0; pass < (passes & ~1); pass += 2) {
127  part(first, last, aux.begin(), pass * Bit);
128  part(aux.begin(), aux.end(), first, (pass + 1) * Bit);
129  }
130 
131  if constexpr(passes & 1) {
132  part(first, last, aux.begin(), (passes - 1) * Bit);
133  std::move(aux.begin(), aux.end(), first);
134  }
135  }
136  }
137 };
138 
139 
140 }
141 
142 
143 #endif // ENTT_CORE_ALGORITHM_HPP
void operator()(It first, It last, Getter getter=Getter{}) const
Sorts the elements in a range.
Definition: algorithm.hpp:100
-
EnTT default namespace.
Definition: algorithm.hpp:12
-
void operator()(It first, It last, Compare compare=Compare{}, Args &&... args) const
Sorts the elements in a range.
Definition: algorithm.hpp:38
-
void operator()(It first, It last, Compare compare=Compare{}) const
Sorts the elements in a range.
Definition: algorithm.hpp:58
-
Function object to wrap std::sort in a class type.
Definition: algorithm.hpp:23
-
Function object for performing LSD radix sort.
Definition: algorithm.hpp:81
-
Function object for performing insertion sort.
Definition: algorithm.hpp:45
+
1 #ifndef ENTT_CORE_ALGORITHM_HPP
+
2 #define ENTT_CORE_ALGORITHM_HPP
+
3 
+
4 
+
5 #include <utility>
+
6 #include <iterator>
+
7 #include <algorithm>
+
8 #include <functional>
+
9 #include "utility.hpp"
+
10 
+
11 
+
12 namespace entt {
+
13 
+
14 
+
23 struct std_sort {
+
37  template<typename It, typename Compare = std::less<>, typename... Args>
+
38  void operator()(It first, It last, Compare compare = Compare{}, Args &&... args) const {
+
39  std::sort(std::forward<Args>(args)..., std::move(first), std::move(last), std::move(compare));
+
40  }
+
41 };
+
42 
+
43 
+ +
57  template<typename It, typename Compare = std::less<>>
+
58  void operator()(It first, It last, Compare compare = Compare{}) const {
+
59  if(first < last) {
+
60  for(auto it = first+1; it < last; ++it) {
+
61  auto value = std::move(*it);
+
62  auto pre = it;
+
63 
+
64  for(; pre > first && compare(value, *(pre-1)); --pre) {
+
65  *pre = std::move(*(pre-1));
+
66  }
+
67 
+
68  *pre = std::move(value);
+
69  }
+
70  }
+
71  }
+
72 };
+
73 
+
74 
+
80 template<std::size_t Bit, std::size_t N>
+
81 struct radix_sort {
+
82  static_assert((N % Bit) == 0);
+
83 
+
99  template<typename It, typename Getter = identity>
+
100  void operator()(It first, It last, Getter getter = Getter{}) const {
+
101  if(first < last) {
+
102  static constexpr auto mask = (1 << Bit) - 1;
+
103  static constexpr auto buckets = 1 << Bit;
+
104  static constexpr auto passes = N / Bit;
+
105 
+
106  using value_type = typename std::iterator_traits<It>::value_type;
+
107  std::vector<value_type> aux(std::distance(first, last));
+
108 
+
109  auto part = [getter = std::move(getter)](auto from, auto to, auto out, auto start) {
+
110  std::size_t index[buckets]{};
+
111  std::size_t count[buckets]{};
+
112 
+
113  std::for_each(from, to, [&getter, &count, start](const value_type &item) {
+
114  ++count[(getter(item) >> start) & mask];
+
115  });
+
116 
+
117  std::for_each(std::next(std::begin(index)), std::end(index), [index = std::begin(index), count = std::begin(count)](auto &item) mutable {
+
118  item = *(index++) + *(count++);
+
119  });
+
120 
+
121  std::for_each(from, to, [&getter, &out, &index, start](value_type &item) {
+
122  out[index[(getter(item) >> start) & mask]++] = std::move(item);
+
123  });
+
124  };
+
125 
+
126  for(std::size_t pass = 0; pass < (passes & ~1); pass += 2) {
+
127  part(first, last, aux.begin(), pass * Bit);
+
128  part(aux.begin(), aux.end(), first, (pass + 1) * Bit);
+
129  }
+
130 
+
131  if constexpr(passes & 1) {
+
132  part(first, last, aux.begin(), (passes - 1) * Bit);
+
133  std::move(aux.begin(), aux.end(), first);
+
134  }
+
135  }
+
136  }
+
137 };
+
138 
+
139 
+
140 }
+
141 
+
142 
+
143 #endif // ENTT_CORE_ALGORITHM_HPP
+
void operator()(It first, It last, Getter getter=Getter{}) const
Sorts the elements in a range.
Definition: algorithm.hpp:100
+
void operator()(It first, It last, Compare compare=Compare{}, Args &&... args) const
Sorts the elements in a range.
Definition: algorithm.hpp:38
+
Function object for performing insertion sort.
Definition: algorithm.hpp:45
+
Function object for performing LSD radix sort.
Definition: algorithm.hpp:81
+
EnTT default namespace.
Definition: algorithm.hpp:12
+
void operator()(It first, It last, Compare compare=Compare{}) const
Sorts the elements in a range.
Definition: algorithm.hpp:58
+
Function object to wrap std::sort in a class type.
Definition: algorithm.hpp:23
diff --git a/annotated.html b/annotated.html index b5a05f9f0..0c358bd52 100644 --- a/annotated.html +++ b/annotated.html @@ -1,9 +1,9 @@ - + - + EnTT: Class List @@ -22,7 +22,7 @@
EnTT -  3.2.1 +  3.2.2
@@ -30,18 +30,21 @@
- + +/* @license-end */ @@ -113,7 +116,7 @@ $(function() {  CidentityIdentity function object (waiting for C++20)  Cinsertion_sortFunction object for performing insertion sort  Cis_equality_comparableProvides the member constant value to true if a given type is equality comparable, false otherwise - Cis_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> >Provides the member constant value to true if a given type is equality comparable, false otherwise. + Cis_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> >Provides the member constant value to true if a given type is equality comparable, false otherwise.  Cis_named_typeProvides the member constant value to true if a given type has a name. In all other cases, value is false  Cis_named_type< Type, std::void_t< named_type_traits_t< std::decay_t< Type > > > >Provides the member constant value to true if a given type has a name. In all other cases, value is false.  CloaderBase class for resource loaders @@ -165,7 +168,7 @@ $(function() { diff --git a/attribute_8h_source.html b/attribute_8h_source.html new file mode 100644 index 000000000..576d452e4 --- /dev/null +++ b/attribute_8h_source.html @@ -0,0 +1,114 @@ + + + + + + + +EnTT: src/entt/core/attribute.h Source File + + + + + + + + + +
+
+ + + + + + +
+
EnTT +  3.3.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
attribute.h
+
+
+
1 #ifndef ENTT_LIB_ATTRIBUTE_H
+
2 #define ENTT_LIB_ATTRIBUTE_H
+
3 
+
4 
+
5 #ifndef ENTT_EXPORT
+
6 # if defined _WIN32 || defined __CYGWIN__ || defined _MSC_VER
+
7 # define ENTT_EXPORT __declspec(dllexport)
+
8 # define ENTT_IMPORT __declspec(dllimport)
+
9 # define ENTT_HIDDEN
+
10 # elif defined __GNUC__ && __GNUC__ >= 4
+
11 # define ENTT_EXPORT __attribute__((visibility("default")))
+
12 # define ENTT_IMPORT __attribute__((visibility("default")))
+
13 # define ENTT_HIDDEN __attribute__((visibility("hidden")))
+
14 # else /* Unsupported compiler */
+
15 # define ENTT_EXPORT
+
16 # define ENTT_IMPORT
+
17 # define ENTT_HIDDEN
+
18 # endif
+
19 #endif
+
20 
+
21 
+
22 #ifndef ENTT_API
+
23 # if defined ENTT_API_EXPORT
+
24 # define ENTT_API ENTT_EXPORT
+
25 # elif defined ENTT_API_IMPORT
+
26 # define ENTT_API ENTT_IMPORT
+
27 # else /* No API */
+
28 # define ENTT_API
+
29 # endif
+
30 #endif
+
31 
+
32 
+
33 #endif // ENTT_LIB_ATTRIBUTE_H
+
+ + + + diff --git a/autotoc_md68.html b/autotoc_md68.html deleted file mode 100644 index bbe033ec1..000000000 --- a/autotoc_md68.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -EnTT: Crash Course: service locator - - - - - - - - - -
-
- - - - - - -
-
EnTT -  3.2.1 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Crash Course: service locator
-
-
-

-Introduction

-

Usually service locators are tightly bound to the services they expose and it's hard to define a general purpose solution. This template based implementation tries to fill the gap and to get rid of the burden of defining a different specific locator for each application.
- This class is tiny, partially unsafe and thus risky to use. Moreover it doesn't fit probably most of the scenarios in which a service locator is required. Look at it as a small tool that can sometimes be useful if users know how to handle it.

-

-Service locator

-

The API is straightforward. The basic idea is that services are implemented by means of interfaces and rely on polymorphism.
- The locator is instantiated with the base type of the service if any and a concrete implementation is provided along with all the parameters required to initialize it. As an example:

-
// the service has no base type, a locator is used to treat it as a kind of singleton
// sets up an opaque service
entt::service_locator<audio_interface>::set<audio_implementation>(params...);
// resets (destroys) the service

The locator can also be queried to know if an active service is currently set and to retrieve it if necessary (either as a pointer or as a reference):

-
// no service currently set
// gets a (possibly empty) shared pointer to the service ...
std::shared_ptr<audio_interface> ptr = entt::service_locator<audio_interface>::get();
// ... or a reference, but it's undefined behaviour if the service isn't set yet

A common use is to wrap the different locators in a container class, creating aliases for the various services:

-
struct locator {
// ...
};
// ...
void init() {
locator::camera::set<camera_null>();
locator::audio::set<audio_implementation>(params...);
// ...
}
- - - - diff --git a/autotoc_md86.html b/autotoc_md86.html deleted file mode 100644 index 4e971cf96..000000000 --- a/autotoc_md86.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -EnTT: Crash Course: resource management - - - - - - - - - -
-
- - - - - - -
-
EnTT -  3.2.1 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Crash Course: resource management
-
-
-

-Introduction

-

Resource management is usually one of the most critical part of a software like a game. Solutions are often tuned to the particular application. There exist several approaches and all of them are perfectly fine as long as they fit the requirements of the piece of software in which they are used.
- Examples are loading everything on start, loading on request, predictive loading, and so on.

-

EnTT doesn't pretend to offer a one-fits-all solution for the different cases. Instead, it offers a minimal and perhaps trivial cache that can be useful most of the time during prototyping and sometimes even in a production environment.
- For those interested in the subject, the plan is to improve it considerably over time in terms of performance, memory usage and functionalities. Hoping to make it, of course, one step at a time.

-

-The resource, the loader and the cache

-

There are three main actors in the model: the resource, the loader and the cache.

-

The resource is whatever users want it to be. An image, a video, an audio, whatever. There are no limits.
- As a minimal example:

-
struct my_resource { const int value; };

A loader is a class the aim of which is to load a specific resource. It has to inherit directly from the dedicated base class as in the following example:

-
struct my_loader final: entt::loader<my_loader, my_resource> {
// ...
};

Where my_resource is the type of resources it creates.
- A resource loader must also expose a public const member function named load that accepts a variable number of arguments and returns a shared pointer to a resource.
- As an example:

-
struct my_loader: entt::loader<my_loader, my_resource> {
std::shared_ptr<my_resource> load(int value) const {
// ...
return std::shared_ptr<my_resource>(new my_resource{ value });
}
};

In general, resource loaders should not have a state or retain data of any type. They should let the cache manage their resources instead.
- As a side note, base class and CRTP idiom aren't strictly required with the current implementation. One could argue that a cache can easily work with loaders of any type. However, future changes won't be breaking ones by forcing the use of a base class today and that's why the model is already in its place.

-

Finally, a cache is a specialization of a class template tailored to a specific resource:

-
using my_cache = entt::cache<my_resource>;
// ...
my_cache cache{};

The idea is to create different caches for different types of resources and to manage each one independently in the most appropriate way.
- As a (very) trivial example, audio tracks can survive in most of the scenes of an application while meshes can be associated with a single scene and then discarded when users leave it.

-

A cache offers a set of basic functionalities to query its internal state and to organize it:

-
// gets the number of resources managed by a cache
const auto size = cache.size();
// checks if a cache contains at least a valid resource
const auto empty = cache.empty();
// clears a cache and discards its content
cache.clear();

Besides these member functions, a cache contains what is needed to load, use and discard resources of the given type.
- Before to explore this part of the interface, it makes sense to mention how resources are identified. The type of the identifiers to use is defined as:

-

Where id_type is an alias for entt::hashed_string::hash_type. Therefore, resource identifiers are created explicitly as in the following example:

-
constexpr auto identifier = entt::cache<resource>::id_type{"my/resource/identifier"_hs};
// this is equivalent to the following
constexpr auto hs = entt::hashed_string{"my/resource/identifier"};

The class hashed_string is described in a dedicated section, so I won't go in details here.

-

Resources are loaded and thus stored in a cache through the load member function. It accepts the loader to use as a template parameter, the resource identifier and the parameters used to construct the resource as arguments:

-
// uses the identifier declared above
cache.load<my_loader>(identifier, 0);
// uses a const char * directly as an identifier
cache.load<my_loader>("another/identifier"_hs, 42);

The function returns a handle to the resource, whether it already exists or is loaded. In case the loader returns an invalid pointer, the handle is invalid as well and therefore it can be easily used with an if statement:

-
if(auto handle = cache.load<my_loader>("another/identifier"_hs, 42); handle) {
// ...
}

Before trying to load a resource, the contains member function can be used to know if a cache already contains a specific resource:

-
auto exists = cache.contains("my/identifier"_hs);

There exists also a member function to use to force a reload of an already existing resource if needed:

-
auto handle = cache.reload<my_loader>("another/identifier"_hs, 42);

As above, the function returns a handle to the resource that is invalid in case of errors. The reload member function is a kind of alias of the following snippet:

-
cache.discard(identifier);
cache.load<my_loader>(identifier, 42);

Where the discard member function is used to get rid of a resource if loaded. In case the cache doesn't contain a resource for the given identifier, discard does nothing and returns immediately.

-

So far, so good. Resources are finally loaded and stored within the cache.
- They are returned to users in the form of handles. To get one of them later on:

-
auto handle = cache.handle("my/identifier"_hs);

The idea behind a handle is the same of the flyweight pattern. In other terms, resources aren't copied around. Instead, instances are shared between handles. Users of a resource own a handle that guarantees that a resource isn't destroyed until all the handles are destroyed, even if the resource itself is removed from the cache.
- Handles are tiny objects both movable and copyable. They return the contained resource as a const reference on request:

- -
const auto &resource = handle.get();
-
const auto &resource = handle;
-
const auto &resource = *handle;

The resource can also be accessed directly using the arrow operator if required:

-
auto value = handle->value;

To test if a handle is still valid, the cast operator to bool allows users to use it in a guard:

-
if(handle) {
// ...
}

Finally, in case there is the need to load a resource and thus to get a handle without storing the resource itself in the cache, users can rely on the temp member function template.
- The declaration is similar to that of load, a (possibly invalid) handle for the resource is returned also in this case:

-
if(auto handle = cache.temp<my_loader>(42); handle) {
// ...
}

Do not forget to test the handle for validity. Otherwise, getting a reference to the resource it points may result in undefined behavior.

-
- - - - diff --git a/autotoc_md89.html b/autotoc_md89.html deleted file mode 100644 index 4a8a3490b..000000000 --- a/autotoc_md89.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - -EnTT: Crash Course: events, signals and everything in between - - - - - - - - - -
-
- - - - - - -
-
EnTT -  3.2.1 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Crash Course: events, signals and everything in between
-
-
-

-Introduction

-

Signals are usually a core part of games and software architectures in general.
- Roughly speaking, they help to decouple the various parts of a system while allowing them to communicate with each other somehow.

-

The so called _modern C++_ comes with a tool that can be useful in these terms, the std::function. As an example, it can be used to create delegates.
- However, there is no guarantee that an std::function does not perform allocations under the hood and this could be problematic sometimes. Furthermore, it solves a problem but may not adapt well to other requirements that may arise from time to time.

-

In case that the flexibility and power of an std::function isn't required or if the price to pay for them is too high,EnTT offers a complete set of lightweight classes to solve the same and many other problems.

-

-Delegate

-

A delegate can be used as a general purpose invoker with no memory overhead for free functions and members provided along with an instance on which to invoke them.
- It does not claim to be a drop-in replacement for an std::function, so do not expect to use it whenever an std::function fits well. That said, it's most likely even a better fit than an std::function in a lot of cases, so expect to use it quite a lot anyway.

-

The interface is trivial. It offers a default constructor to create empty delegates:

-

All what is needed to create an instance is to specify the type of the function the delegate will contain, that is the signature of the free function or the member one wants to assign to it.

-

Attempting to use an empty delegate by invoking its function call operator results in undefined behavior or most likely a crash. Before to use a delegate, it must be initialized.
- There exists a bunch of overloads of the connect member function to do that. As an example of use:

-
int f(int i) { return i; }
struct my_struct {
int f(const int &i) { return i }
};
// bind a free function to the delegate
delegate.connect<&f>();
// bind a member function to the delegate
my_struct instance;
delegate.connect<&my_struct::f>(instance);

The delegate class accepts also data members, if needed. In this case, the function type of the delegate is such that the parameter list is empty and the value of the data member is at least convertible to the return type.

-

Free functions having type equivalent to void(T &, args...) are accepted as well. In this case, T & is considered a payload and the function will receive it back every time it's invoked. In other terms, this works just fine with the above definition:

-
void g(const char &c, int i) { /* ... */ }
const char c = 'c';
delegate.connect<&g>(c);

The function g will be invoked with a reference to c and 42. However, the function type of the delegate is still void(int). This is also the signature of its function call operator.

-

Another interesting aspect of the delegate class is that it accepts also functions with a list of parameters that is shorter than that of the function type used to specialize the delegate itself.
- The following code is therefore perfectly valid:

-
void g() { /* ... */ }
delegate.connect<&g>();

Where the function type of the delegate is void(int) as above. It goes without saying that the extra arguments are silently discarded internally.
-v This is a nice-to-have feature in a lot of cases, as an example when the delegate class is used as a building block of a signal-slot system.

-

To create and initialize a delegate at once, there are a few specialized constructors. Because of the rules of the language, the listener is provided by means of the entt::connect_arg variable template:

-
entt::delegate<int(int)> func{entt::connect_arg<&f>};

Aside connect, a disconnect counterpart isn't provided. Instead, there exists a reset member function to use to clear a delegate.
- To know if a delegate is empty, it can be used explicitly in every conditional statement:

-
if(delegate) {
// ...
}

Finally, to invoke a delegate, the function call operator is the way to go as already shown in the examples above:

-
auto ret = delegate(42);

In all cases, the listeners don't have to strictly follow the signature of the delegate. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given result type, everything works just fine.

-

-Signals

-

Signal handlers work with references to classes, function pointers and pointers to members. Listeners can be any kind of objects and users are in charge of connecting and disconnecting them from a signal to avoid crashes due to different lifetimes. On the other side, performance shouldn't be affected that much by the presence of such a signal handler.
- Signals make use of delegates internally and therefore they undergo the same rules and offer similar functionalities. It may be a good idea to consult the documentation of the delegate class for further information.

-

A signal handler can be used as a private data member without exposing any publish functionality to the clients of a class. The basic idea is to impose a clear separation between the signal itself and the sink class, that is a tool to be used to connect and disconnect listeners on the fly.

-

The API of a signal handler is straightforward. If a collector is supplied to the signal when something is published, all the values returned by the listeners can be literally collected and used later by the caller. Otherwise, the class works just like a plain signal that emits events from time to time.
- To create instances of signal handlers it is sufficient to provide the type of function to which they refer:

-

Signals offer all the basic functionalities required to know how many listeners they contain (size) or if they contain at least a listener (empty), as well as a function to use to swap handlers (swap).

-

Besides them, there are member functions to use both to connect and disconnect listeners in all their forms by means of a sink:

-
void foo(int, char) { /* ... */ }
struct listener {
void bar(const int &, char) { /* ... */ }
};
// ...
entt::sink sink{signal};
listener instance;
sink.connect<&foo>();
sink.connect<&listener::bar>(instance);
// ...
// disconnects a free function
sink.disconnect<&foo>();
// disconnect a member function of an instance
sink.disconnect<&listener::bar>(instance);
// disconnect all the member functions of an instance, if any
sink.disconnect(instance);
// discards all the listeners at once
sink.disconnect();

As shown above, the listeners don't have to strictly follow the signature of the signal. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given return type, everything works just fine.
- It's also possible to connect a listener before other listeners already contained by the signal. The before function returns a sink object correctly initialized for the purpose that can be used to connect one or more listeners in order and in the desired position:

-
sink.before<&foo>().connect<&listener::bar>(instance);

In all cases, the connect member function returns by default a connection object to be used as an alternative to break a connection by means of its release member function. A scoped_connection can also be created from a connection. In this case, the link is broken automatically as soon as the object goes out of scope.

-

Once listeners are attached (or even if there are no listeners at all), events and data in general can be published through a signal by means of the publish member function:

-
signal.publish(42, 'c');

To collect data, the collect member function should be used instead. Below is a minimal example to show how to use it:

-
int f() { return 0; }
int g() { return 1; }
// ...
entt::sink sink{signal};
sink.connect<&f>();
sink.connect<&g>();
std::vector<int> vec{};
signal.collect([&vec](int value) { vec.push_back(value); });
assert(vec[0] == 0);
assert(vec[1] == 1);

A collector must expose a function operator that accepts as an argument a type to which the return type of the listeners can be converted. Moreover, it can optionally return a boolean value that is true to stop collecting data, false otherwise. This way one can avoid calling all the listeners in case it isn't necessary.
- Functors can also be used in place of a lambda. Since the collector is copied when invoking the collect member function, std::ref is the way to go in this case:

-
struct my_collector {
std::vector<int> vec{};
bool operator()(int v) noexcept {
vec.push_back(v);
return true;
}
};
// ...
my_collector collector;
signal.collect(std::ref(collector));

-Event dispatcher

-

The event dispatcher class is designed so as to be used in a loop. It allows users both to trigger immediate events or to queue events to be published all together once per tick.
- This class shares part of its API with the one of the signal handler, but it doesn't require that all the types of events are specified when declared:

-
// define a general purpose dispatcher
entt::dispatcher dispatcher{};

In order to register an instance of a class to a dispatcher, its type must expose one or more member functions the arguments of which are such that const E & can be converted to them for each type of event E, no matter what the return value is.
- The name of the member function aimed to receive the event must be provided to the connect member function of the sink in charge for the specific event:

-
struct an_event { int value; };
struct another_event {};
struct listener {
void receive(const an_event &) { /* ... */ }
void method(const another_event &) { /* ... */ }
};
// ...
listener listener;
dispatcher.sink<an_event>().connect<&listener::receive>(listener);
dispatcher.sink<another_event>().connect<&listener::method>(listener);

The disconnect member function follows the same pattern and can be used to remove one listener at a time or all of them at once:

-
dispatcher.sink<an_event>().disconnect<&listener::receive>(listener);
dispatcher.sink<another_event>().disconnect(listener);

The trigger member function serves the purpose of sending an immediate event to all the listeners registered so far. It offers a convenient approach that relieves users from having to create the event itself. Instead, it's enough to specify the type of event and provide all the parameters required to construct it.
- As an example:

-
dispatcher.trigger<an_event>(42);
dispatcher.trigger<another_event>();

Listeners are invoked immediately, order of execution isn't guaranteed. This method can be used to push around urgent messages like an is terminating notification on a mobile app.

-

On the other hand, the enqueue member function queues messages together and allows to maintain control over the moment they are sent to listeners. The signature of this method is more or less the same of trigger:

-
dispatcher.enqueue<an_event>(42);
dispatcher.enqueue<another_event>();

Events are stored aside until the update member function is invoked, then all the messages that are still pending are sent to the listeners at once:

-
// emits all the events of the given type at once
dispatcher.update<my_event>();
// emits all the events queued so far at once
dispatcher.update();

This way users can embed the dispatcher in a loop and literally dispatch events once per tick to their systems.

-

-Event emitter

-

A general purpose event emitter thought mainly for those cases where it comes to working with asynchronous stuff.
- Originally designed to fit the requirements of uvw (a wrapper for libuv written in modern C++), it was adapted later to be included in this library.

-

To create a custom emitter type, derived classes must inherit directly from the base class as:

-
struct my_emitter: emitter<my_emitter> {
// ...
}

The full list of accepted types of events isn't required. Handlers are created internally on the fly and thus each type of event is accepted by default.

-

Whenever an event is published, an emitter provides the listeners with a reference to itself along with a const reference to the event. Therefore listeners have an handy way to work with it without incurring in the need of capturing a reference to the emitter itself.
- In addition, an opaque object is returned each time a connection is established between an emitter and a listener, allowing the caller to disconnect them at a later time.
- The opaque object used to handle connections is both movable and copyable. On the other side, an event emitter is movable but not copyable by default.

-

To create new instances of an emitter, no arguments are required:

-
my_emitter emitter{};

Listeners must be movable and callable objects (free functions, lambdas, functors, std::functions, whatever) whose function type is:

-
void(const Event &, my_emitter &)

Where Event is the type of event they want to listen.
- There are two ways to attach a listener to an event emitter that differ slightly from each other:

- -
auto conn = emitter.on<my_event>([](const my_event &event, my_emitter &emitter) {
// ...
});

The connection object can be freely discarded. Otherwise, it can be used later to disconnect the listener if required.

- -
auto conn = emitter.once<my_event>([](const my_event &event, my_emitter &emitter) {
// ...
});

The connection object can be freely discarded. Otherwise, it can be used later to disconnect the listener if required.

-

In both cases, the connection object can be used with the erase member function:

-
emitter.erase(conn);

There are also two member functions to use either to disconnect all the listeners for a given type of event or to clear the emitter:

-
// removes all the listener for the specific event
emitter.clear<my_event>();
// removes all the listeners registered so far
emitter.clear();

To send an event to all the listeners that are interested in it, the publish member function offers a convenient approach that relieves users from having to create the event:

-
struct my_event { int i; };
// ...
emitter.publish<my_event>(42);

Finally, the empty member function tests if there exists at least either a listener registered with the event emitter or to a given type of event:

-
bool empty;
// checks if there is any listener registered for the specific event
empty = emitter.empty<my_event>();
// checks it there are listeners registered with the event emitter
empty = emitter.empty();

In general, the event emitter is a handy tool when the derived classes wrap asynchronous operations, because it introduces a nice-to-have model based on events and listeners that kindly hides the complexity behind the scenes. However it is not limited to such uses.

-
- - - - diff --git a/cache_8hpp_source.html b/cache_8hpp_source.html index 46e9966dd..899e4d372 100644 --- a/cache_8hpp_source.html +++ b/cache_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/resource/cache.hpp Source File @@ -22,7 +22,7 @@
EnTT -  3.2.1 +  3.2.2
@@ -30,18 +30,21 @@ - + +/* @license-end */
cache.hpp
-
1 #ifndef ENTT_RESOURCE_CACHE_HPP
2 #define ENTT_RESOURCE_CACHE_HPP
3 
4 
5 #include <memory>
6 #include <utility>
7 #include <type_traits>
8 #include <unordered_map>
9 #include "../config/config.h"
10 #include "handle.hpp"
11 #include "loader.hpp"
12 #include "fwd.hpp"
13 
14 
15 namespace entt {
16 
17 
28 template<typename Resource>
29 struct cache {
31  using size_type = std::size_t;
33  using resource_type = Resource;
35  using id_type = ENTT_ID_TYPE;
36 
38  cache() = default;
39 
41  cache(cache &&) = default;
42 
44  cache & operator=(cache &&) = default;
45 
50  size_type size() const ENTT_NOEXCEPT {
51  return resources.size();
52  }
53 
58  bool empty() const ENTT_NOEXCEPT {
59  return resources.empty();
60  }
61 
68  void clear() ENTT_NOEXCEPT {
69  resources.clear();
70  }
71 
94  template<typename Loader, typename... Args>
95  entt::handle<Resource> load(const id_type id, Args &&... args) {
96  static_assert(std::is_base_of_v<loader<Loader, Resource>, Loader>);
97  entt::handle<Resource> resource{};
98 
99  if(auto it = resources.find(id); it == resources.cend()) {
100  if(auto instance = Loader{}.get(std::forward<Args>(args)...); instance) {
101  resources[id] = instance;
102  resource = std::move(instance);
103  }
104  } else {
105  resource = it->second;
106  }
107 
108  return resource;
109  }
110 
134  template<typename Loader, typename... Args>
135  entt::handle<Resource> reload(const id_type id, Args &&... args) {
136  return (discard(id), load<Loader>(id, std::forward<Args>(args)...));
137  }
138 
151  template<typename Loader, typename... Args>
152  entt::handle<Resource> temp(Args &&... args) const {
153  return { Loader{}.get(std::forward<Args>(args)...) };
154  }
155 
170  auto it = resources.find(id);
171  return { it == resources.end() ? nullptr : it->second };
172  }
173 
179  bool contains(const id_type id) const ENTT_NOEXCEPT {
180  return (resources.find(id) != resources.cend());
181  }
182 
191  void discard(const id_type id) ENTT_NOEXCEPT {
192  if(auto it = resources.find(id); it != resources.end()) {
193  resources.erase(it);
194  }
195  }
196 
214  template <typename Func>
215  void each(Func func) const {
216  auto begin = resources.begin();
217  auto end = resources.end();
218 
219  while(begin != end) {
220  auto curr = begin++;
221 
222  if constexpr(std::is_invocable_v<Func, id_type>) {
223  func(curr->first);
224  } else if constexpr(std::is_invocable_v<Func, entt::handle<Resource>>) {
225  func(entt::handle{ curr->second });
226  } else {
227  func(curr->first, entt::handle{ curr->second });
228  }
229  }
230  }
231 
232 private:
233  std::unordered_map<id_type, std::shared_ptr<Resource>> resources;
234 };
235 
236 
237 }
238 
239 
240 #endif // ENTT_RESOURCE_CACHE_HPP
void each(Func func) const
Iterates all resources.
Definition: cache.hpp:215
-
Shared resource handle.
Definition: fwd.hpp:14
-
Base class for resource loaders.
Definition: fwd.hpp:18
-
entt::handle< Resource > load(const id_type id, Args &&... args)
Loads the resource that corresponds to a given identifier.
Definition: cache.hpp:95
-
EnTT default namespace.
Definition: algorithm.hpp:12
-
size_type size() const ENTT_NOEXCEPT
Number of resources managed by a cache.
Definition: cache.hpp:50
-
cache & operator=(cache &&)=default
Default move assignment operator.
-
Simple cache for resources of a given type.
Definition: cache.hpp:29
-
void discard(const id_type id) ENTT_NOEXCEPT
Discards the resource that corresponds to a given identifier.
Definition: cache.hpp:191
-
cache()=default
Default constructor.
-
ENTT_ID_TYPE id_type
Unique identifier type for resources.
Definition: cache.hpp:35
-
entt::handle< Resource > reload(const id_type id, Args &&... args)
Reloads a resource or loads it for the first time if not present.
Definition: cache.hpp:135
-
entt::handle< Resource > temp(Args &&... args) const
Creates a temporary handle for a resource.
Definition: cache.hpp:152
-
Resource resource_type
Type of resources managed by a cache.
Definition: cache.hpp:33
-
void clear() ENTT_NOEXCEPT
Clears a cache and discards all its resources.
Definition: cache.hpp:68
-
bool contains(const id_type id) const ENTT_NOEXCEPT
Checks if a cache contains a given identifier.
Definition: cache.hpp:179
-
std::size_t size_type
Unsigned integer type.
Definition: cache.hpp:31
-
entt::handle< Resource > handle(const id_type id) const
Creates a handle for a given resource identifier.
Definition: cache.hpp:169
-
bool empty() const ENTT_NOEXCEPT
Returns true if a cache contains no resources, false otherwise.
Definition: cache.hpp:58
+
1 #ifndef ENTT_RESOURCE_CACHE_HPP
+
2 #define ENTT_RESOURCE_CACHE_HPP
+
3 
+
4 
+
5 #include <memory>
+
6 #include <utility>
+
7 #include <type_traits>
+
8 #include <unordered_map>
+
9 #include "../config/config.h"
+
10 #include "handle.hpp"
+
11 #include "loader.hpp"
+
12 #include "fwd.hpp"
+
13 
+
14 
+
15 namespace entt {
+
16 
+
17 
+
28 template<typename Resource>
+
29 struct cache {
+
31  using size_type = std::size_t;
+
33  using resource_type = Resource;
+
35  using id_type = ENTT_ID_TYPE;
+
36 
+
38  cache() = default;
+
39 
+
41  cache(cache &&) = default;
+
42 
+
44  cache & operator=(cache &&) = default;
+
45 
+
50  size_type size() const ENTT_NOEXCEPT {
+
51  return resources.size();
+
52  }
+
53 
+
58  bool empty() const ENTT_NOEXCEPT {
+
59  return resources.empty();
+
60  }
+
61 
+
68  void clear() ENTT_NOEXCEPT {
+
69  resources.clear();
+
70  }
+
71 
+
94  template<typename Loader, typename... Args>
+
95  entt::handle<Resource> load(const id_type id, Args &&... args) {
+
96  static_assert(std::is_base_of_v<loader<Loader, Resource>, Loader>);
+
97  entt::handle<Resource> resource{};
+
98 
+
99  if(auto it = resources.find(id); it == resources.cend()) {
+
100  if(auto instance = Loader{}.get(std::forward<Args>(args)...); instance) {
+
101  resources[id] = instance;
+
102  resource = std::move(instance);
+
103  }
+
104  } else {
+
105  resource = it->second;
+
106  }
+
107 
+
108  return resource;
+
109  }
+
110 
+
134  template<typename Loader, typename... Args>
+
135  entt::handle<Resource> reload(const id_type id, Args &&... args) {
+
136  return (discard(id), load<Loader>(id, std::forward<Args>(args)...));
+
137  }
+
138 
+
151  template<typename Loader, typename... Args>
+
152  entt::handle<Resource> temp(Args &&... args) const {
+
153  return { Loader{}.get(std::forward<Args>(args)...) };
+
154  }
+
155 
+ +
170  auto it = resources.find(id);
+
171  return { it == resources.end() ? nullptr : it->second };
+
172  }
+
173 
+
179  bool contains(const id_type id) const ENTT_NOEXCEPT {
+
180  return (resources.find(id) != resources.cend());
+
181  }
+
182 
+
191  void discard(const id_type id) ENTT_NOEXCEPT {
+
192  if(auto it = resources.find(id); it != resources.end()) {
+
193  resources.erase(it);
+
194  }
+
195  }
+
196 
+
214  template <typename Func>
+
215  void each(Func func) const {
+
216  auto begin = resources.begin();
+
217  auto end = resources.end();
+
218 
+
219  while(begin != end) {
+
220  auto curr = begin++;
+
221 
+
222  if constexpr(std::is_invocable_v<Func, id_type>) {
+
223  func(curr->first);
+
224  } else if constexpr(std::is_invocable_v<Func, entt::handle<Resource>>) {
+
225  func(entt::handle{ curr->second });
+
226  } else {
+
227  func(curr->first, entt::handle{ curr->second });
+
228  }
+
229  }
+
230  }
+
231 
+
232 private:
+
233  std::unordered_map<id_type, std::shared_ptr<Resource>> resources;
+
234 };
+
235 
+
236 
+
237 }
+
238 
+
239 
+
240 #endif // ENTT_RESOURCE_CACHE_HPP
+
size_type size() const ENTT_NOEXCEPT
Number of resources managed by a cache.
Definition: cache.hpp:50
+
bool empty() const ENTT_NOEXCEPT
Returns true if a cache contains no resources, false otherwise.
Definition: cache.hpp:58
+
Resource resource_type
Type of resources managed by a cache.
Definition: cache.hpp:33
+
entt::handle< Resource > temp(Args &&... args) const
Creates a temporary handle for a resource.
Definition: cache.hpp:152
+
void clear() ENTT_NOEXCEPT
Clears a cache and discards all its resources.
Definition: cache.hpp:68
+
bool contains(const id_type id) const ENTT_NOEXCEPT
Checks if a cache contains a given identifier.
Definition: cache.hpp:179
+
Simple cache for resources of a given type.
Definition: cache.hpp:29
+
cache & operator=(cache &&)=default
Default move assignment operator.
+
entt::handle< Resource > handle(const id_type id) const
Creates a handle for a given resource identifier.
Definition: cache.hpp:169
+
Shared resource handle.
Definition: fwd.hpp:14
+
std::size_t size_type
Unsigned integer type.
Definition: cache.hpp:31
+
cache()=default
Default constructor.
+
EnTT default namespace.
Definition: algorithm.hpp:12
+
void discard(const id_type id) ENTT_NOEXCEPT
Discards the resource that corresponds to a given identifier.
Definition: cache.hpp:191
+
entt::handle< Resource > load(const id_type id, Args &&... args)
Loads the resource that corresponds to a given identifier.
Definition: cache.hpp:95
+
Base class for resource loaders.
Definition: fwd.hpp:18
+
ENTT_ID_TYPE id_type
Unique identifier type for resources.
Definition: cache.hpp:35
+
entt::handle< Resource > reload(const id_type id, Args &&... args)
Reloads a resource or loads it for the first time if not present.
Definition: cache.hpp:135
+
void each(Func func) const
Iterates all resources.
Definition: cache.hpp:215
diff --git a/classentt_1_1basic__continuous__loader-members.html b/classentt_1_1basic__continuous__loader-members.html index e07c8d813..de6a94092 100644 --- a/classentt_1_1basic__continuous__loader-members.html +++ b/classentt_1_1basic__continuous__loader-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
EnTT -  3.2.1 +  3.2.2
@@ -30,18 +30,21 @@
- + +/* @license-end */ - + +/* @license-end */

Public Member Functions

 basic_continuous_loader (basic_registry< entity_type > &source) ENTT_NOEXCEPT - Constructs a loader that is bound to a given registry. More...
+ Constructs a loader that is bound to a given registry. More...
   basic_continuous_loader (basic_continuous_loader &&)=default  Default move constructor.
  basic_continuous_loaderoperator= (basic_continuous_loader &&)=default - Default move assignment operator. More...
+ Default move assignment operator. More...
  template<typename Archive > basic_continuous_loaderentities (Archive &archive) - Restores entities that were in use during serialization. More...
+ Restores entities that were in use during serialization. More...
  template<typename Archive > basic_continuous_loaderdestroyed (Archive &archive) - Restores entities that were destroyed during serialization. More...
+ Restores entities that were destroyed during serialization. More...
  template<typename... Component, typename Archive , typename... Type, typename... Member> basic_continuous_loadercomponent (Archive &archive, Member Type::*... member) - Restores components and assigns them to the right entities. More...
+ Restores components and assigns them to the right entities. More...
  basic_continuous_loadershrink () - Helps to purge entities that no longer have a conterpart. More...
+ Helps to purge entities that no longer have a conterpart. More...
  basic_continuous_loaderorphans () - Destroys those entities that have no components. More...
+ Destroys those entities that have no components. More...
  bool has (entity_type entt) const ENTT_NOEXCEPT - Tests if a loader knows about a given entity. More...
+ Tests if a loader knows about a given entity. More...
  entity_type map (entity_type entt) const ENTT_NOEXCEPT - Returns the identifier to which an entity refers. More...
+ Returns the identifier to which an entity refers. More...
 

Detailed Description

@@ -126,12 +129,12 @@ Public Member Functions class entt::basic_continuous_loader< Entity >

Utility class for continuous loading.

-

A continuous loader is designed to load data from a source registry to a (possibly) non-empty destination. The loader can accomodate in a registry more than one snapshot in a sort of continuous loading that updates the destination one step at a time.
- Identifiers that entities originally had are not transferred to the target. Instead, the loader maps remote identifiers to local ones while restoring a snapshot.
+

A continuous loader is designed to load data from a source registry to a (possibly) non-empty destination. The loader can accomodate in a registry more than one snapshot in a sort of continuous loading that updates the destination one step at a time.
+ Identifiers that entities originally had are not transferred to the target. Instead, the loader maps remote identifiers to local ones while restoring a snapshot.
An example of use is the implementation of a client-server applications with the requirement of transferring somehow parts of the representation side to side.

Template Parameters
- +
EntityA valid entity type (see entt_traits for more details).
EntityA valid entity type (see entt_traits for more details).
@@ -216,7 +219,7 @@ template<typename... Component, typename Archive , typename... Type, typename

Restores components and assigns them to the right entities.

-

The template parameter list must be exactly the same used during serialization. In the event that the entity to which the component is assigned doesn't exist yet, the loader will take care to create a local counterpart for it.
+

The template parameter list must be exactly the same used during serialization. In the event that the entity to which the component is assigned doesn't exist yet, the loader will take care to create a local counterpart for it.
Members can be either data members of type entity_type or containers of entities. In both cases, the loader will visit them and update the entities by replacing each one with its local counterpart.

Template Parameters
@@ -471,7 +474,7 @@ template<typename Entity >

Destroys those entities that have no components.

-

In case all the entities were serialized but only part of the components was saved, it could happen that some of the entities have no components once restored.
+

In case all the entities were serialized but only part of the components was saved, it could happen that some of the entities have no components once restored.
This functions helps to identify and destroy those entities.

Returns
A non-const reference to this loader.
@@ -521,7 +524,7 @@ template<typename Entity >
diff --git a/classentt_1_1basic__group.html b/classentt_1_1basic__group.html index 77a7ad9d4..61bef1397 100644 --- a/classentt_1_1basic__group.html +++ b/classentt_1_1basic__group.html @@ -1,9 +1,9 @@ - + - +EnTT: entt::basic_group<... > Class Template Reference @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
EnTT -  3.2.1 +  3.2.2
- + +/* @license-end */
diff --git a/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html b/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html index d54408301..f59ff6324 100644 --- a/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html +++ b/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... > Class Template Reference @@ -22,7 +22,7 @@
EnTT -  3.2.1 +  3.2.2
@@ -30,18 +30,21 @@
- + +/* @license-end */
template<typename Component > size_type size () const ENTT_NOEXCEPT - Returns the number of existing components of the given type. More...
+ Returns the number of existing components of the given type. More...
  size_type size () const ENTT_NOEXCEPT - Returns the number of entities that have the given components. More...
+ Returns the number of entities that have the given components. More...
  template<typename... Component> bool empty () const ENTT_NOEXCEPT - Checks whether the group or the pools of the given components are empty. More...
+ Checks whether the group or the pools of the given components are empty. More...
  template<typename Component > Component * raw () const ENTT_NOEXCEPT - Direct access to the list of components of a given pool. More...
+ Direct access to the list of components of a given pool. More...
  template<typename Component > const entity_typedata () const ENTT_NOEXCEPT - Direct access to the list of entities of a given pool. More...
+ Direct access to the list of entities of a given pool. More...
  const entity_typedata () const ENTT_NOEXCEPT - Direct access to the list of entities. More...
+ Direct access to the list of entities. More...
  iterator_type begin () const ENTT_NOEXCEPT - Returns an iterator to the first entity that has the given components. More...
+ Returns an iterator to the first entity that has the given components. More...
  iterator_type end () const ENTT_NOEXCEPT - Returns an iterator that is past the last entity that has the given components. More...
+ Returns an iterator that is past the last entity that has the given components. More...
  iterator_type find (const entity_type entt) const ENTT_NOEXCEPT - Finds an entity. More...
+ Finds an entity. More...
  entity_type operator[] (const size_type pos) const ENTT_NOEXCEPT - Returns the identifier that occupies the given position. More...
+ Returns the identifier that occupies the given position. More...
  bool contains (const entity_type entt) const ENTT_NOEXCEPT - Checks if a group contains an entity. More...
+ Checks if a group contains an entity. More...
  template<typename... Component> decltype(auto) get ([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT - Returns the components assigned to the given entity. More...
+ Returns the components assigned to the given entity. More...
  template<typename Func > void each (Func func) const - Iterates entities and components and applies the given function object to them. More...
+ Iterates entities and components and applies the given function object to them. More...
  template<typename Func > void less (Func func) const - Iterates entities and components and applies the given function object to them. More...
+ Iterates entities and components and applies the given function object to them. More...
  bool sortable () const ENTT_NOEXCEPT - Checks whether the group can be sorted. More...
+ Checks whether the group can be sorted. More...
  template<typename... Component, typename Compare , typename Sort = std_sort, typename... Args> void sort (Compare compare, Sort algo=Sort{}, Args &&... args) - Sort a group according to the given comparison function. More...
+ Sort a group according to the given comparison function. More...
  @@ -30,18 +30,21 @@

@@ -183,7 +186,7 @@ class entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get
Warning
Lifetime of a group must overcome the one of the registry that generated it. In any other case, attempting to use a group results in undefined behavior.
Template Parameters
- + @@ -219,7 +222,7 @@ template<typename Entity , typename... Exclude, typename... Get, typename...

Returns an iterator to the first entity that has the given components.

-

The returned iterator points to the first entity that has the given components. If the group is empty, the returned iterator will be equal to end().

+

The returned iterator points to the first entity that has the given components. If the group is empty, the returned iterator will be equal to end().

Note
Input iterators stay true to the order imposed to the underlying data structures.
Returns
An iterator to the first entity that has the given components.
@@ -294,8 +297,8 @@ template<typename Component >

Direct access to the list of entities of a given pool.

-

The returned pointer is such that range [data<Component>(), data<Component>() + size<Component>()] is always a valid range, even if the container is empty.
- Moreover, in case the group owns the given component, the range [data<Component>(), data<Component>() + size()] is such that it contains the entities that are part of the group itself.

+

The returned pointer is such that range [data<Component>(), data<Component>() + size<Component>()] is always a valid range, even if the container is empty.
+ Moreover, in case the group owns the given component, the range [data<Component>(), data<Component>() + size()] is such that it contains the entities that are part of the group itself.

Note
There are no guarantees on the order of the entities. Use begin and end if you want to iterate the group in the expected order.
Template Parameters
EntityA valid entity type (see entt_traits for more details).
EntityA valid entity type (see entt_traits for more details).
ExcludeTypes of components used to filter the group.
GetTypes of components observed by the group.
OwnedTypes of components owned by the group.
@@ -335,7 +338,7 @@ template<typename Entity , typename... Exclude, typename... Get, typename...

Direct access to the list of entities.

-

The returned pointer is such that range [data(), data() + size()] is always a valid range, even if the container is empty.

+

The returned pointer is such that range [data(), data() + size()] is always a valid range, even if the container is empty.

Note
There are no guarantees on the order of the entities. Use begin and end if you want to iterate the group in the expected order.
Returns
A pointer to the array of entities.
@@ -372,9 +375,11 @@ template<typename Func >

Iterates entities and components and applies the given function object to them.

-

The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The constness of the components is as requested.
+

The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The constness of the components is as requested.
The signature of the function must be equivalent to one of the following forms:

-
void(const entity_type, Owned &..., Get &...);
void(Owned &..., Get &...);
Note
Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.
+
void(const entity_type, Owned &..., Get &...);
+
void(Owned &..., Get &...);
+
Note
Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.
Template Parameters
@@ -534,8 +539,8 @@ template<typename... Component>

Returns the components assigned to the given entity.

-

Prefer this function instead of registry::get during iterations. It has far better performance than its companion function.

-
Warning
Attempting to use an invalid component type results in a compilation error. Attempting to use an entity that doesn't belong to the group results in undefined behavior.
+

Prefer this function instead of registry::get during iterations. It has far better performance than its companion function.

+
Warning
Attempting to use an invalid component type results in a compilation error. Attempting to use an entity that doesn't belong to the group results in undefined behavior.
An assertion will abort the execution at runtime in debug mode if the group doesn't contain the given entity.
Template Parameters
FuncType of the function object to invoke.
@@ -584,9 +589,11 @@ template<typename Func >

Iterates entities and components and applies the given function object to them.

-

The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The constness of the components is as requested.
+

The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The constness of the components is as requested.
The signature of the function must be equivalent to one of the following forms:

-
void(const entity_type, Type &...);
void(Type &...);
See also
each
+
void(const entity_type, Type &...);
+
void(Type &...);
+
See also
each
Template Parameters
@@ -671,8 +678,8 @@ template<typename Component >

Direct access to the list of components of a given pool.

-

The returned pointer is such that range [raw<Component>(), raw<Component>() + size<Component>()] is always a valid range, even if the container is empty.
- Moreover, in case the group owns the given component, the range [raw<Component>(), raw<Component>() + size()] is such that it contains the instances that are part of the group itself.

+

The returned pointer is such that range [raw<Component>(), raw<Component>() + size<Component>()] is always a valid range, even if the container is empty.
+ Moreover, in case the group owns the given component, the range [raw<Component>(), raw<Component>() + size()] is such that it contains the instances that are part of the group itself.

Note
There are no guarantees on the order of the components. Use begin and end if you want to iterate the group in the expected order.
Template Parameters
FuncType of the function object to invoke.
@@ -805,7 +812,10 @@ template<typename... Component, typename Compare , typename Sort = std_sort,

Sort a group according to the given comparison function.

Sort the group so that iterating it with a couple of iterators returns entities and components in the expected order. See begin and end for more details.

The comparison function object must return true if the first element is less than the second one, false otherwise. The signature of the comparison function should be equivalent to one of the following:

-
bool(std::tuple<Component &...>, std::tuple<Component &...>);
bool(const Component &, const Component &);
bool(const Entity, const Entity);

Where Component are either owned types or not but still such that they are iterated by the group.
+

bool(std::tuple<Component &...>, std::tuple<Component &...>);
+
bool(const Component &, const Component &);
+
bool(const Entity, const Entity);
+

Where Component are either owned types or not but still such that they are iterated by the group.
Moreover, the comparison function object shall induce a strict weak ordering on the values.

The sort function oject must offer a member function template operator() that accepts three arguments:

    @@ -872,11 +882,12 @@ template<typename Entity , typename... Exclude, typename... Get, typename...
  • src/entt/entity/group.hpp
+ diff --git a/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4-members.html b/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4-members.html index 3409d6528..18a2a9209 100644 --- a/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4-members.html +++ b/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
EnTT -  3.2.1 +  3.2.2
- + +/* @license-end */

EnTT -  3.2.1 +  3.2.2
- + +/* @license-end */
template<typename Component > size_type size () const ENTT_NOEXCEPT - Returns the number of existing components of the given type. More...
+ Returns the number of existing components of the given type. More...
  size_type size () const ENTT_NOEXCEPT - Returns the number of entities that have the given components. More...
+ Returns the number of entities that have the given components. More...
  size_type capacity () const ENTT_NOEXCEPT - Returns the number of elements that a group has currently allocated space for. More...
+ Returns the number of elements that a group has currently allocated space for. More...
  void shrink_to_fit () @@ -111,53 +114,53 @@ void   template<typename... Component> bool empty () const ENTT_NOEXCEPT - Checks whether the group or the pools of the given components are empty. More...
+ Checks whether the group or the pools of the given components are empty. More...
  template<typename Component > Component * raw () const ENTT_NOEXCEPT - Direct access to the list of components of a given pool. More...
+ Direct access to the list of components of a given pool. More...
  template<typename Component > const entity_typedata () const ENTT_NOEXCEPT - Direct access to the list of entities of a given pool. More...
+ Direct access to the list of entities of a given pool. More...
  const entity_typedata () const ENTT_NOEXCEPT - Direct access to the list of entities. More...
+ Direct access to the list of entities. More...
  iterator_type begin () const ENTT_NOEXCEPT - Returns an iterator to the first entity that has the given components. More...
+ Returns an iterator to the first entity that has the given components. More...
  iterator_type end () const ENTT_NOEXCEPT - Returns an iterator that is past the last entity that has the given components. More...
+ Returns an iterator that is past the last entity that has the given components. More...
  iterator_type find (const entity_type entt) const ENTT_NOEXCEPT - Finds an entity. More...
+ Finds an entity. More...
  entity_type operator[] (const size_type pos) const ENTT_NOEXCEPT - Returns the identifier that occupies the given position. More...
+ Returns the identifier that occupies the given position. More...
  bool contains (const entity_type entt) const ENTT_NOEXCEPT - Checks if a group contains an entity. More...
+ Checks if a group contains an entity. More...
  template<typename... Component> decltype(auto) get ([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT - Returns the components assigned to the given entity. More...
+ Returns the components assigned to the given entity. More...
  template<typename Func > void each (Func func) const - Iterates entities and components and applies the given function object to them. More...
+ Iterates entities and components and applies the given function object to them. More...
  template<typename Func > void less (Func func) const - Iterates entities and components and applies the given function object to them. More...
+ Iterates entities and components and applies the given function object to them. More...
  template<typename... Component, typename Compare , typename Sort = std_sort, typename... Args> void sort (Compare compare, Sort algo=Sort{}, Args &&... args) - Sort a group according to the given comparison function. More...
+ Sort a group according to the given comparison function. More...
  template<typename Component > void sort () const - Sort the shared pool of entities according to the given component. More...
+ Sort the shared pool of entities according to the given component. More...
  @@ -30,18 +30,21 @@

@@ -172,7 +175,7 @@ class 

Note
Groups share references to the underlying data structures of the registry that generated them. Therefore any change to the entities and to the components made by means of the registry are immediately reflected by all the groups.
+
Note
Groups share references to the underlying data structures of the registry that generated them. Therefore any change to the entities and to the components made by means of the registry are immediately reflected by all the groups.
Moreover, sorting a non-owning group affects all the instance of the same group (it means that users don't have to call sort on each instance to sort all of them because they share the set of entities).
Warning
Lifetime of a group must overcome the one of the registry that generated it. In any other case, attempting to use a group results in undefined behavior.
Template Parameters
- +
EntityA valid entity type (see entt_traits for more details).
EntityA valid entity type (see entt_traits for more details).
ExcludeTypes of components used to filter the group.
GetType of components observed by the group.
@@ -222,7 +225,7 @@ template<typename Entity , typename... Exclude, typename... Get>

Returns an iterator to the first entity that has the given components.

-

The returned iterator points to the first entity that has the given components. If the group is empty, the returned iterator will be equal to end().

+

The returned iterator points to the first entity that has the given components. If the group is empty, the returned iterator will be equal to end().

Note
Input iterators stay true to the order imposed to the underlying data structures.
Returns
An iterator to the first entity that has the given components.
@@ -369,7 +372,7 @@ template<typename Entity , typename... Exclude, typename... Get>

Direct access to the list of entities.

-

The returned pointer is such that range [data(), data() + size()] is always a valid range, even if the container is empty.

+

The returned pointer is such that range [data(), data() + size()] is always a valid range, even if the container is empty.

Note
There are no guarantees on the order of the entities. Use begin and end if you want to iterate the group in the expected order.
Returns
A pointer to the array of entities.
@@ -406,9 +409,11 @@ template<typename Func >

Iterates entities and components and applies the given function object to them.

-

The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The constness of the components is as requested.
+

The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The constness of the components is as requested.
The signature of the function must be equivalent to one of the following forms:

-
void(const entity_type, Get &...);
void(Get &...);
Note
Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.
+
void(const entity_type, Get &...);
+
void(Get &...);
+
Note
Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.
Template Parameters
@@ -568,8 +573,8 @@ template<typename... Component>

Returns the components assigned to the given entity.

-

Prefer this function instead of registry::get during iterations. It has far better performance than its companion function.

-
Warning
Attempting to use an invalid component type results in a compilation error. Attempting to use an entity that doesn't belong to the group results in undefined behavior.
+

Prefer this function instead of registry::get during iterations. It has far better performance than its companion function.

+
Warning
Attempting to use an invalid component type results in a compilation error. Attempting to use an entity that doesn't belong to the group results in undefined behavior.
An assertion will abort the execution at runtime in debug mode if the group doesn't contain the given entity.
Template Parameters
FuncType of the function object to invoke.
@@ -618,9 +623,11 @@ template<typename Func >

Iterates entities and components and applies the given function object to them.

-

The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The constness of the components is as requested.
+

The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The constness of the components is as requested.
The signature of the function must be equivalent to one of the following forms:

-
void(const entity_type, Type &...);
void(Type &...);
See also
each
+
void(const entity_type, Type &...);
+
void(Type &...);
+
See also
each
Template Parameters
@@ -789,10 +796,51 @@ template<typename Entity , typename... Exclude, typename... Get>

Definition at line 115 of file group.hpp.

+ + + +

◆ sort() [1/2]

+ +
+
+
+template<typename Entity , typename... Exclude, typename... Get>
+
+template<typename Component >
+
FuncType of the function object to invoke.
+ + + + +
+ + + + + + + +
void entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::sort () const
+
+inline
+
+ +

Sort the shared pool of entities according to the given component.

+

Non-owning groups of the same type share with the registry a pool of entities with its own order that doesn't depend on the order of any pool of components. Users can order the underlying data structure so that it respects the order of the pool of the given component.

+
Note
The shared pool of entities and thus its order is affected by the changes to each and every pool that it tracks. Therefore changes to those pools can quickly ruin the order imposed to the pool of entities shared between the non-owning groups.
+
Template Parameters
+ + +
ComponentType of component to use to impose the order.
+
+
+ +

Definition at line 425 of file group.hpp.

+
-

◆ sort() [1/2]

+

◆ sort() [2/2]

@@ -838,7 +886,10 @@ template<typename... Component, typename Compare , typename Sort = std_sort,

Sort a group according to the given comparison function.

Sort the group so that iterating it with a couple of iterators returns entities and components in the expected order. See begin and end for more details.

The comparison function object must return true if the first element is less than the second one, false otherwise. The signature of the comparison function should be equivalent to one of the following:

-
bool(std::tuple<Component &...>, std::tuple<Component &...>);
bool(const Component &..., const Component &...);
bool(const Entity, const Entity);

Where Component are such that they are iterated by the group.
+

bool(std::tuple<Component &...>, std::tuple<Component &...>);
+
bool(const Component &..., const Component &...);
+
bool(const Entity, const Entity);
+

Where Component are such that they are iterated by the group.
Moreover, the comparison function object shall induce a strict weak ordering on the values.

The sort function oject must offer a member function template operator() that accepts three arguments:

    @@ -867,58 +918,18 @@ template<typename... Component, typename Compare , typename Sort = std_sort,

    Definition at line 393 of file group.hpp.

    -
-
- -

◆ sort() [2/2]

- -
-
-
-template<typename Entity , typename... Exclude, typename... Get>
-
-template<typename Component >
- - - - - -
- - - - - - - -
void entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::sort () const
-
-inline
-
- -

Sort the shared pool of entities according to the given component.

-

Non-owning groups of the same type share with the registry a pool of entities with its own order that doesn't depend on the order of any pool of components. Users can order the underlying data structure so that it respects the order of the pool of the given component.

-
Note
The shared pool of entities and thus its order is affected by the changes to each and every pool that it tracks. Therefore changes to those pools can quickly ruin the order imposed to the pool of entities shared between the non-owning groups.
-
Template Parameters
- - -
ComponentType of component to use to impose the order.
-
-
- -

Definition at line 425 of file group.hpp.

-

The documentation for this class was generated from the following file: + diff --git a/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_9e8a2286698e49212830f433eb636a65.html b/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_9e8a2286698e49212830f433eb636a65.html index 5a3546905..fde229e99 100644 --- a/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_9e8a2286698e49212830f433eb636a65.html +++ b/classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_9e8a2286698e49212830f433eb636a65.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
EnTT -  3.2.1 +  3.2.2
- + +/* @license-end */ - + +/* @license-end */ - + +/* @license-end */
  template<std::size_t N> constexpr basic_hashed_string (const value_type(&curr)[N]) ENTT_NOEXCEPT - Constructs a hashed string from an array of const characters. More...
+ Constructs a hashed string from an array of const characters. More...
  constexpr basic_hashed_string (const_wrapper wrapper) ENTT_NOEXCEPT - Explicit constructor on purpose to avoid constructing a hashed string directly from a const value_type *. More...
+ Explicit constructor on purpose to avoid constructing a hashed string directly from a const value_type *. More...
  constexpr const value_typedata () const ENTT_NOEXCEPT - Returns the human-readable representation of a hashed string. More...
+ Returns the human-readable representation of a hashed string. More...
  constexpr hash_type value () const ENTT_NOEXCEPT - Returns the numeric representation of a hashed string. More...
+ Returns the numeric representation of a hashed string. More...
  constexpr operator const value_type * () const ENTT_NOEXCEPT - Returns the human-readable representation of a hashed string. More...
+ Returns the human-readable representation of a hashed string. More...
  constexpr operator hash_type () const ENTT_NOEXCEPT - Returns the numeric representation of a hashed string. More...
+ Returns the numeric representation of a hashed string. More...
  constexpr bool operator== (const basic_hashed_string &other) const ENTT_NOEXCEPT - Compares two hashed strings. More...
+ Compares two hashed strings. More...
  - + - + - +

Static Public Member Functions

template<std::size_t N>
static constexpr hash_type to_value (const value_type(&str)[N]) ENTT_NOEXCEPT
 Returns directly the numeric representation of a string. More...
 Returns directly the numeric representation of a string. More...
 
static hash_type to_value (const_wrapper wrapper) ENTT_NOEXCEPT
 Returns directly the numeric representation of a string. More...
 Returns directly the numeric representation of a string. More...
 
static hash_type to_value (const value_type *str, std::size_t size) ENTT_NOEXCEPT
 Returns directly the numeric representation of a string view. More...
 Returns directly the numeric representation of a string view. More...
 

Detailed Description

@@ -137,7 +140,7 @@ Static Public Member Functions class entt::basic_hashed_string< Char >

Zero overhead unique identifier.

-

TURN_OFF_DOXYGEN A hashed string is a compile-time tool that allows users to use human-readable identifers in the codebase while using their numeric counterparts at runtime.
+

TURN_OFF_DOXYGEN A hashed string is a compile-time tool that allows users to use human-readable identifers in the codebase while using their numeric counterparts at runtime.
Because of that, a hashed string can also be used in constant expressions if required.

Template Parameters
@@ -171,14 +174,15 @@ template<std::size_t N>
-inline +inlineconstexpr

Constructs a hashed string from an array of const characters.

-

Forcing template resolution avoids implicit conversions. An human-readable identifier can be anything but a plain, old bunch of characters.
- Example of use:

basic_hashed_string<char> hs{"my.png"};
Template Parameters
+

Forcing template resolution avoids implicit conversions. An human-readable identifier can be anything but a plain, old bunch of characters.
+ Example of use:

basic_hashed_string<char> hs{"my.png"};
+
Template Parameters
NNumber of characters of the identifier.
@@ -216,7 +220,7 @@ template<typename Char>
-inlineexplicit +inlineexplicitconstexpr
@@ -254,7 +258,7 @@ template<typename Char>
-inline +inlineconstexpr
@@ -286,7 +290,7 @@ template<typename Char>
-inline +inlineconstexpr
@@ -318,7 +322,7 @@ template<typename Char>
-inline +inlineconstexpr
@@ -351,7 +355,7 @@ template<typename Char>
-inline +inlineconstexpr
@@ -367,97 +371,10 @@ template<typename Char>

Definition at line 184 of file hashed_string.hpp.

- - - -

◆ to_value() [1/3]

- -
-
-
-template<typename Char>
-
-template<std::size_t N>
- - - - - -
- - - - - - - - -
static constexpr hash_type entt::basic_hashed_string< Char >::to_value (const value_type(&) str[N])
-
-inlinestatic
-
- -

Returns directly the numeric representation of a string.

-

Forcing template resolution avoids implicit conversions. An human-readable identifier can be anything but a plain, old bunch of characters.
- Example of use:

const auto value = basic_hashed_string<char>::to_value("my.png");
Template Parameters
- - -
NNumber of characters of the identifier.
-
-
-
Parameters
- - -
strHuman-readable identifer.
-
-
-
Returns
The numeric representation of the string.
- -

Definition at line 96 of file hashed_string.hpp.

- -
-
- -

◆ to_value() [2/3]

- -
-
-
-template<typename Char>
- - - - - -
- - - - - - - - -
static hash_type entt::basic_hashed_string< Char >::to_value (const_wrapper wrapper)
-
-inlinestatic
-
- -

Returns directly the numeric representation of a string.

-
Parameters
- - -
wrapperHelps achieving the purpose by relying on overloading.
-
-
-
Returns
The numeric representation of the string.
- -

Definition at line 105 of file hashed_string.hpp.

-
-

◆ to_value() [3/3]

+

◆ to_value() [1/3]

@@ -504,6 +421,94 @@ template<typename Char>

Definition at line 115 of file hashed_string.hpp.

+
+ + +

◆ to_value() [2/3]

+ +
+
+
+template<typename Char>
+
+template<std::size_t N>
+ + + + + +
+ + + + + + + + +
static constexpr hash_type entt::basic_hashed_string< Char >::to_value (const value_type(&) str[N])
+
+inlinestaticconstexpr
+
+ +

Returns directly the numeric representation of a string.

+

Forcing template resolution avoids implicit conversions. An human-readable identifier can be anything but a plain, old bunch of characters.
+ Example of use:

+
Template Parameters
+ + +
NNumber of characters of the identifier.
+
+
+
Parameters
+ + +
strHuman-readable identifer.
+
+
+
Returns
The numeric representation of the string.
+ +

Definition at line 96 of file hashed_string.hpp.

+ +
+
+ +

◆ to_value() [3/3]

+ +
+
+
+template<typename Char>
+ + + + + +
+ + + + + + + + +
static hash_type entt::basic_hashed_string< Char >::to_value (const_wrapper wrapper)
+
+inlinestatic
+
+ +

Returns directly the numeric representation of a string.

+
Parameters
+ + +
wrapperHelps achieving the purpose by relying on overloading.
+
+
+
Returns
The numeric representation of the string.
+ +

Definition at line 105 of file hashed_string.hpp.

+
@@ -526,7 +531,7 @@ template<typename Char> -inline +inlineconstexpr
@@ -542,11 +547,13 @@ template<typename Char>
  • src/entt/core/hashed_string.hpp
  • +
    entt::basic_hashed_string::to_value
    static constexpr hash_type to_value(const value_type(&str)[N]) ENTT_NOEXCEPT
    Returns directly the numeric representation of a string.
    Definition: hashed_string.hpp:96
    +
    entt::basic_hashed_string::value
    constexpr hash_type value() const ENTT_NOEXCEPT
    Returns the numeric representation of a hashed string.
    Definition: hashed_string.hpp:166
    diff --git a/classentt_1_1basic__observer-members.html b/classentt_1_1basic__observer-members.html index 06b628d83..a810b622e 100644 --- a/classentt_1_1basic__observer-members.html +++ b/classentt_1_1basic__observer-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */
      template<typename... Matcher>  basic_observer (basic_registry< entity_type > &reg, basic_collector< Matcher... >) ENTT_NOEXCEPT - Creates an observer and connects it to a given registry. More...
    + Creates an observer and connects it to a given registry. More...
       ~basic_observer ()=default  Default destructor.
      basic_observeroperator= (const basic_observer &)=delete - Default copy assignment operator, deleted on purpose. More...
    + Default copy assignment operator, deleted on purpose. More...
      basic_observeroperator= (basic_observer &&)=delete - Default move assignment operator, deleted on purpose. More...
    + Default move assignment operator, deleted on purpose. More...
      template<typename... Matcher> void connect (basic_registry< entity_type > &reg, basic_collector< Matcher... >) - Connects an observer to a given registry. More...
    + Connects an observer to a given registry. More...
      void disconnect ()  Disconnects an observer from the registry it keeps track of.
      size_type size () const ENTT_NOEXCEPT - Returns the number of elements in an observer. More...
    + Returns the number of elements in an observer. More...
      bool empty () const ENTT_NOEXCEPT - Checks whether an observer is empty. More...
    + Checks whether an observer is empty. More...
      const entity_typedata () const ENTT_NOEXCEPT - Direct access to the list of entities of the observer. More...
    + Direct access to the list of entities of the observer. More...
      iterator_type begin () const ENTT_NOEXCEPT - Returns an iterator to the first entity of the observer. More...
    + Returns an iterator to the first entity of the observer. More...
      iterator_type end () const ENTT_NOEXCEPT - Returns an iterator that is past the last entity of the observer. More...
    + Returns an iterator that is past the last entity of the observer. More...
      void clear () @@ -150,11 +153,11 @@ void   template<typename Func > void each (Func func) const - Iterates entities and applies the given function object to them, then clears the observer. More...
    + Iterates entities and applies the given function object to them, then clears the observer. More...
      template<typename Func > void each (Func func) - Iterates entities and applies the given function object to them, then clears the observer. More...
    + Iterates entities and applies the given function object to them, then clears the observer. More...
     

    Detailed Description

    @@ -162,7 +165,7 @@ void 
    Warning
    Lifetime of an observer doesn't necessarily have to overcome the one of the registry to which it is connected. However, the observer must be disconnected from the registry before being destroyed to avoid crashes due to dangling pointers.
    Template Parameters
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -242,7 +245,7 @@ template<typename... Matcher>
    -

    Definition at line 285 of file observer.hpp.

    +

    Definition at line 283 of file observer.hpp.

    @@ -273,10 +276,10 @@ template<typename Entity >

    Returns an iterator to the first entity of the observer.

    -

    The returned iterator points to the first entity of the observer. If the container is empty, the returned iterator will be equal to end().

    +

    The returned iterator points to the first entity of the observer. If the container is empty, the returned iterator will be equal to end().

    Returns
    An iterator to the first entity of the observer.
    -

    Definition at line 369 of file observer.hpp.

    +

    Definition at line 367 of file observer.hpp.

    @@ -332,7 +335,7 @@ template<typename... Matcher> -

    Definition at line 314 of file observer.hpp.

    +

    Definition at line 312 of file observer.hpp.

    @@ -362,64 +365,16 @@ template<typename Entity >

    Direct access to the list of entities of the observer.

    -

    The returned pointer is such that range [data(), data() + size()] is always a valid range, even if the container is empty.

    +

    The returned pointer is such that range [data(), data() + size()] is always a valid range, even if the container is empty.

    Note
    There are no guarantees on the order of the entities. Use begin and end if you want to iterate the observer in the expected order.
    Returns
    A pointer to the array of entities.
    -

    Definition at line 357 of file observer.hpp.

    - -
    - - -

    ◆ each() [1/2]

    - -
    -
    -
    -template<typename Entity >
    -
    -template<typename Func >
    - - - - - -
    - - - - - - - - -
    void entt::basic_observer< Entity >::each (Func func) const
    -
    -inline
    -
    - -

    Iterates entities and applies the given function object to them, then clears the observer.

    -

    The function object is invoked for each entity.
    - The signature of the function must be equivalent to the following form:

    -
    void(const entity_type);
    Template Parameters
    - - -
    FuncType of the function object to invoke.
    -
    -
    -
    Parameters
    - - -
    funcA valid function object.
    -
    -
    - -

    Definition at line 407 of file observer.hpp.

    +

    Definition at line 355 of file observer.hpp.

    -

    ◆ each() [2/2]

    +

    ◆ each() [1/2]

    @@ -447,9 +402,10 @@ template<typename Func >

    Iterates entities and applies the given function object to them, then clears the observer.

    -

    The function object is invoked for each entity.
    +

    The function object is invoked for each entity.
    The signature of the function must be equivalent to the following form:

    -
    void(const entity_type);
    Template Parameters
    +
    void(const entity_type);
    +
    Template Parameters
    FuncType of the function object to invoke.
    @@ -462,7 +418,56 @@ template<typename Func >
    -

    Definition at line 427 of file observer.hpp.

    +

    Definition at line 425 of file observer.hpp.

    + + + + +

    ◆ each() [2/2]

    + +
    +
    +
    +template<typename Entity >
    +
    +template<typename Func >
    + + + + + +
    + + + + + + + + +
    void entt::basic_observer< Entity >::each (Func func) const
    +
    +inline
    +
    + +

    Iterates entities and applies the given function object to them, then clears the observer.

    +

    The function object is invoked for each entity.
    + The signature of the function must be equivalent to the following form:

    +
    void(const entity_type);
    +
    Template Parameters
    + + +
    FuncType of the function object to invoke.
    +
    +
    +
    Parameters
    + + +
    funcA valid function object.
    +
    +
    + +

    Definition at line 405 of file observer.hpp.

    @@ -494,7 +499,7 @@ template<typename Entity >

    Checks whether an observer is empty.

    Returns
    True if the observer is empty, false otherwise.
    -

    Definition at line 341 of file observer.hpp.

    +

    Definition at line 339 of file observer.hpp.

    @@ -527,43 +532,12 @@ template<typename Entity >

    The returned iterator points to the entity following the last entity of the observer. Attempting to dereference the returned iterator results in undefined behavior.

    Returns
    An iterator to the entity following the last entity of the observer.
    -

    Definition at line 383 of file observer.hpp.

    - - - - -

    ◆ operator=() [1/2]

    - -
    -
    -
    -template<typename Entity >
    - - - - - -
    - - - - - - - - -
    basic_observer& entt::basic_observer< Entity >::operator= (const basic_observer< Entity > & )
    -
    -delete
    -
    - -

    Default copy assignment operator, deleted on purpose.

    -
    Returns
    This observer.
    +

    Definition at line 381 of file observer.hpp.

    -

    ◆ operator=() [2/2]

    +

    ◆ operator=() [1/2]

    @@ -591,6 +565,37 @@ template<typename Entity >

    Default move assignment operator, deleted on purpose.

    Returns
    This observer.
    +
    + + +

    ◆ operator=() [2/2]

    + +
    +
    +
    +template<typename Entity >
    + + + + + +
    + + + + + + + + +
    basic_observer& entt::basic_observer< Entity >::operator= (const basic_observer< Entity > & )
    +
    +delete
    +
    + +

    Default copy assignment operator, deleted on purpose.

    +
    Returns
    This observer.
    +
    @@ -621,7 +626,7 @@ template<typename Entity >

    Returns the number of elements in an observer.

    Returns
    Number of elements.
    -

    Definition at line 333 of file observer.hpp.

    +

    Definition at line 331 of file observer.hpp.

    @@ -630,11 +635,12 @@ template<typename Entity >
  • src/entt/entity/observer.hpp
  • +
    entt::basic_observer::entity_type
    Entity entity_type
    Underlying entity identifier.
    Definition: observer.hpp:261
    diff --git a/classentt_1_1basic__registry-members.html b/classentt_1_1basic__registry-members.html index 10128bf9e..49407582c 100644 --- a/classentt_1_1basic__registry-members.html +++ b/classentt_1_1basic__registry-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */
     Default move constructor.
      basic_registryoperator= (basic_registry &&)=default - Default move assignment operator. More...
    + Default move assignment operator. More...
      template<typename... Component> void prepare () - Prepares pools for the given types if required. More...
    + Prepares pools for the given types if required. More...
      template<typename Component > size_type size () const ENTT_NOEXCEPT - Returns the number of existing components of the given type. More...
    + Returns the number of existing components of the given type. More...
      size_type size () const ENTT_NOEXCEPT - Returns the number of entities created so far. More...
    + Returns the number of entities created so far. More...
      size_type alive () const ENTT_NOEXCEPT - Returns the number of entities still in use. More...
    + Returns the number of entities still in use. More...
      template<typename... Component> void reserve (const size_type cap) - Increases the capacity of the registry or of the pools for the given components. More...
    + Increases the capacity of the registry or of the pools for the given components. More...
      template<typename Component > size_type capacity () const ENTT_NOEXCEPT - Returns the capacity of the pool for the given component. More...
    + Returns the capacity of the pool for the given component. More...
      size_type capacity () const ENTT_NOEXCEPT - Returns the number of entities that a registry has currently allocated space for. More...
    + Returns the number of entities that a registry has currently allocated space for. More...
      template<typename... Component> void shrink_to_fit () - Requests the removal of unused capacity for the given components. More...
    + Requests the removal of unused capacity for the given components. More...
      template<typename... Component> bool empty () const ENTT_NOEXCEPT - Checks whether the registry or the pools of the given components are empty. More...
    + Checks whether the registry or the pools of the given components are empty. More...
      template<typename Component > const Component * raw () const ENTT_NOEXCEPT - Direct access to the list of components of a given pool. More...
    + Direct access to the list of components of a given pool. More...
      template<typename Component > Component * raw () ENTT_NOEXCEPT - Direct access to the list of components of a given pool. More...
    + Direct access to the list of components of a given pool. More...
      template<typename Component > const entity_typedata () const ENTT_NOEXCEPT - Direct access to the list of entities of a given pool. More...
    + Direct access to the list of entities of a given pool. More...
      bool valid (const entity_type entity) const ENTT_NOEXCEPT - Checks if an entity identifier refers to a valid entity. More...
    + Checks if an entity identifier refers to a valid entity. More...
      version_type current (const entity_type entity) const ENTT_NOEXCEPT - Returns the actual version for an entity identifier. More...
    + Returns the actual version for an entity identifier. More...
      template<typename... Component> auto create () - Creates a new entity and returns it. More...
    + Creates a new entity and returns it. More...
      template<typename... Component, typename It > auto create (It first, It last) - Assigns each element in a range an entity. More...
    + Assigns each element in a range an entity. More...
      template<typename... Component, typename... Exclude> entity_type create (entity_type src, const basic_registry &other, exclude_t< Exclude... >={}) - Creates a new entity from a prototype entity. More...
    + Creates a new entity from a prototype entity. More...
      template<typename... Component, typename It , typename... Exclude> void create (It first, It last, entity_type src, const basic_registry &other, exclude_t< Exclude... >={}) - Assigns each element in a range an entity from a prototype entity. More...
    + Assigns each element in a range an entity from a prototype entity. More...
      void destroy (const entity_type entity) - Destroys an entity and lets the registry recycle the identifier. More...
    + Destroys an entity and lets the registry recycle the identifier. More...
      template<typename It > void destroy (It first, It last) - Destroys all the entities in a range. More...
    + Destroys all the entities in a range. More...
      template<typename Component , typename... Args> decltype(auto) assign (const entity_type entity, [[maybe_unused]] Args &&... args) - Assigns the given component to an entity. More...
    + Assigns the given component to an entity. More...
      template<typename Component > void remove (const entity_type entity) - Removes the given component from an entity. More...
    + Removes the given component from an entity. More...
      template<typename... Component> bool has (const entity_type entity) const ENTT_NOEXCEPT - Checks if an entity has all the given components. More...
    + Checks if an entity has all the given components. More...
      template<typename... Component> decltype(auto) get ([[maybe_unused]] const entity_type entity) const - Returns references to the given components for an entity. More...
    + Returns references to the given components for an entity. More...
      template<typename... Component> decltype(auto) get ([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT - Returns references to the given components for an entity. More...
    + Returns references to the given components for an entity. More...
      template<typename Component , typename... Args> decltype(auto) get_or_assign (const entity_type entity, Args &&... args) ENTT_NOEXCEPT - Returns a reference to the given component for an entity. More...
    + Returns a reference to the given component for an entity. More...
      template<typename... Component> auto try_get ([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT - Returns pointers to the given components for an entity. More...
    + Returns pointers to the given components for an entity. More...
      template<typename... Component> auto try_get ([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT - Returns pointers to the given components for an entity. More...
    + Returns pointers to the given components for an entity. More...
      template<typename Component , typename... Args> decltype(auto) replace (const entity_type entity, Args &&... args) - Replaces the given component for an entity. More...
    + Replaces the given component for an entity. More...
      template<typename Component , typename... Args> decltype(auto) assign_or_replace (const entity_type entity, Args &&... args) - Assigns or replaces the given component for an entity. More...
    + Assigns or replaces the given component for an entity. More...
      template<typename Component > auto on_construct () ENTT_NOEXCEPT - Returns a sink object for the given component. More...
    + Returns a sink object for the given component. More...
      template<typename Component > auto on_replace () ENTT_NOEXCEPT - Returns a sink object for the given component. More...
    + Returns a sink object for the given component. More...
      template<typename Component > auto on_destroy () ENTT_NOEXCEPT - Returns a sink object for the given component. More...
    + Returns a sink object for the given component. More...
      template<typename Component , typename Compare , typename Sort = std_sort, typename... Args> void sort (Compare compare, Sort algo=Sort{}, Args &&... args) - Sorts the pool of entities for the given component. More...
    + Sorts the pool of entities for the given component. More...
      template<typename To , typename From > void sort () - Sorts two pools of components in the same way. More...
    + Sorts two pools of components in the same way. More...
      template<typename Component > void reset (const entity_type entity) - Resets the given component for an entity. More...
    + Resets the given component for an entity. More...
      template<typename Component > void reset () - Resets the pool of the given component. More...
    + Resets the pool of the given component. More...
      void reset () - Resets a whole registry. More...
    + Resets a whole registry. More...
      template<typename Func > void each (Func func) const - Iterates all the entities that are still in use. More...
    + Iterates all the entities that are still in use. More...
      bool orphan (const entity_type entity) const - Checks if an entity has components assigned. More...
    + Checks if an entity has components assigned. More...
      template<typename Func > void orphans (Func func) const - Iterates orphans and applies them the given function object. More...
    + Iterates orphans and applies them the given function object. More...
      template<typename... Component, typename... Exclude> entt::basic_view< Entity, exclude_t< Exclude... >, Component... > view (exclude_t< Exclude... >={}) - Returns a view for the given components. More...
    + Returns a view for the given components. More...
      template<typename... Component, typename... Exclude> entt::basic_view< Entity, exclude_t< Exclude... >, Component... > view (exclude_t< Exclude... >={}) const - Returns a view for the given components. More...
    + Returns a view for the given components. More...
      template<typename... Component> bool sortable () const ENTT_NOEXCEPT - Checks whether the given components belong to any group. More...
    + Checks whether the given components belong to any group. More...
      template<typename... Owned, typename... Get, typename... Exclude> entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... > group (get_t< Get... >, exclude_t< Exclude... >={}) - Returns a group for the given components. More...
    + Returns a group for the given components. More...
      template<typename... Owned, typename... Get, typename... Exclude> entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... > group (get_t< Get... >, exclude_t< Exclude... >={}) const - Returns a group for the given components. More...
    + Returns a group for the given components. More...
      template<typename... Owned, typename... Exclude> entt::basic_group< Entity, exclude_t< Exclude... >, get_t<>, Owned... > group (exclude_t< Exclude... >={}) - Returns a group for the given components. More...
    + Returns a group for the given components. More...
      template<typename... Owned, typename... Exclude> entt::basic_group< Entity, exclude_t< Exclude... >, get_t<>, Owned... > group (exclude_t< Exclude... >={}) const - Returns a group for the given components. More...
    + Returns a group for the given components. More...
      template<typename It > entt::basic_runtime_view< Entity > runtime_view (It first, It last) const - Returns a runtime view for the given components. More...
    + Returns a runtime view for the given components. More...
      template<typename... Component, typename... Exclude> basic_registry clone (exclude_t< Exclude... >={}) const - Returns a full or partial copy of a registry. More...
    + Returns a full or partial copy of a registry. More...
      template<typename... Component, typename... Exclude> void stomp (const entity_type dst, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={}) - Stomps an entity and its components. More...
    + Stomps an entity and its components. More...
      template<typename... Component, typename It , typename... Exclude> void stomp (It first, It last, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={}) - Stomps the entities in a range and their components. More...
    + Stomps the entities in a range and their components. More...
      entt::basic_snapshot< Entity > snapshot () const ENTT_NOEXCEPT - Returns a temporary object to use to create snapshots. More...
    + Returns a temporary object to use to create snapshots. More...
      basic_snapshot_loader< Entity > loader () ENTT_NOEXCEPT - Returns a temporary object to use to load snapshots. More...
    + Returns a temporary object to use to load snapshots. More...
      template<typename Type , typename... Args> Type & set (Args &&... args) - Binds an object to the context of the registry. More...
    + Binds an object to the context of the registry. More...
      template<typename Type > void unset () - Unsets a context variable if it exists. More...
    + Unsets a context variable if it exists. More...
      template<typename Type , typename... Args> Type & ctx_or_set (Args &&... args) - Binds an object to the context of the registry. More...
    + Binds an object to the context of the registry. More...
      template<typename Type > const Type * try_ctx () const ENTT_NOEXCEPT - Returns a pointer to an object in the context of the registry. More...
    + Returns a pointer to an object in the context of the registry. More...
      template<typename Type > Type * try_ctx () ENTT_NOEXCEPT - Returns a pointer to an object in the context of the registry. More...
    + Returns a pointer to an object in the context of the registry. More...
      template<typename Type > const Type & ctx () const ENTT_NOEXCEPT - Returns a reference to an object in the context of the registry. More...
    + Returns a reference to an object in the context of the registry. More...
      template<typename Type > Type & ctx () ENTT_NOEXCEPT - Returns a reference to an object in the context of the registry. More...
    + Returns a reference to an object in the context of the registry. More...
      - + - + - +

    Static Public Member Functions

    template<typename Component >
    static component type () ENTT_NOEXCEPT
     Returns the opaque identifier of a component. More...
     Returns the opaque identifier of a component. More...
     
    static entity_type entity (const entity_type entity) ENTT_NOEXCEPT
     Returns the entity identifier without the version. More...
     Returns the entity identifier without the version. More...
     
    static version_type version (const entity_type entity) ENTT_NOEXCEPT
     Returns the version stored along with an entity identifier. More...
     Returns the version stored along with an entity identifier. More...
     

    Detailed Description

    @@ -360,11 +363,11 @@ Static Public Member Functions class entt::basic_registry< Entity >

    Fast and reliable entity-component system.

    -

    The registry is the core class of the entity-component framework.
    +

    The registry is the core class of the entity-component framework.
    It stores entities and arranges pools of components on a per request basis. By means of a registry, users can manage entities and components and thus create views or groups to iterate them.

    Template Parameters
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -443,7 +446,7 @@ template<typename Component , typename... Args>

    Assigns the given component to an entity.

    A new instance of the given component is created and initialized with the arguments provided (the component must have a proper constructor or be of aggregate type). Then the component is assigned to the given entity.

    -
    Warning
    Attempting to use an invalid entity or to assign a component to an entity that already owns it results in undefined behavior.
    +
    Warning
    Attempting to use an invalid entity or to assign a component to an entity that already owns it results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity or if the entity already owns an instance of the given component.
    Template Parameters
    @@ -505,8 +508,9 @@ template<typename Component , typename... Args>

    Assigns or replaces the given component for an entity.

    Equivalent to the following snippet (pseudocode):

    -
    auto &component = registry.has<Component>(entity) ? registry.replace<Component>(entity, args...) : registry.assign<Component>(entity, args...);

    Prefer this function anyway because it has slightly better performance.

    -
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    +
    auto &component = registry.has<Component>(entity) ? registry.replace<Component>(entity, args...) : registry.assign<Component>(entity, args...);
    +

    Prefer this function anyway because it has slightly better performance.

    +
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity.
    Template Parameters
    @@ -629,13 +633,13 @@ template<typename... Component, typename... Exclude>

    Returns a full or partial copy of a registry.

    -

    The components must be copyable for obvious reasons. The entities maintain their versions once copied.
    +

    The components must be copyable for obvious reasons. The entities maintain their versions once copied.
    If no components are provided, the registry will try to clone all the existing pools. The ones for non-copyable types won't be cloned.

    This feature supports exclusion lists. The excluded types have higher priority than those indicated for cloning. An excluded type will never be cloned.

    Note
    There isn't an efficient way to know if all the entities are assigned at least one component once copied. Therefore, there may be orphans. It is up to the caller to clean up the registry if necessary.
    Listeners and groups aren't copied. It is up to the caller to connect the listeners of interest to the new registry and to set up groups.
    -
    Warning
    Attempting to clone components that aren't copyable results in unexpected behaviors.
    +
    Warning
    Attempting to clone components that aren't copyable results in unexpected behaviors.
    A static assertion will abort the compilation when the components provided aren't copy constructible. Otherwise, an assertion will abort the execution at runtime in debug mode in case one or more pools cannot be cloned.
    Template Parameters
    @@ -683,7 +687,7 @@ template<typename... Component>
  • Newly created ones in case no entities have been previously destroyed.
  • Recycled ones with updated versions.
  • -

    Users should not care about the type of the returned entity identifier. In case entity identifers are stored around, the valid member function can be used to know if they are still valid or the entity has been destroyed and potentially recycled.
    +

    Users should not care about the type of the returned entity identifier. In case entity identifers are stored around, the valid member function can be used to know if they are still valid or the entity has been destroyed and potentially recycled.
    The returned entity has assigned the given components, if any.

    The components must be at least default constructible. A compilation error will occur otherwhise.

    Template Parameters
    @@ -696,71 +700,10 @@ template<typename... Component>

    Definition at line 565 of file registry.hpp.

    - - - -

    ◆ create() [2/4]

    - -
    -
    -
    -template<typename Entity>
    -
    -template<typename... Component, typename It >
    -
    - - - - -
    - - - - - - - - - - - - - - - - - - -
    auto entt::basic_registry< Entity >::create (It first,
    It last 
    )
    -
    -inline
    -
    - -

    Assigns each element in a range an entity.

    -
    See also
    create
    -

    The components must be at least move and default insertable. A compilation error will occur otherwhise.

    -
    Template Parameters
    - - - -
    ComponentTypes of components to assign to the entity.
    ItType of forward iterator.
    -
    -
    -
    Parameters
    - - - -
    firstAn iterator to the first element of the range to generate.
    lastAn iterator past the last element of the range to generate.
    -
    -
    -
    Returns
    No return value if the component list is empty, a tuple containing the iterators to the lists of components just created and sorted the same of the entities otherwise.
    - -

    Definition at line 591 of file registry.hpp.

    -
    -

    ◆ create() [3/4]

    +

    ◆ create() [2/4]

    @@ -804,8 +747,8 @@ template<typename... Component, typename... Exclude>

    Creates a new entity from a prototype entity.

    -
    See also
    create
    -

    The components must be copyable for obvious reasons. The source entity must be a valid one.
    +

    See also
    create
    +

    The components must be copyable for obvious reasons. The source entity must be a valid one.
    If no components are provided, the registry will try to copy all the existing types. The non-copyable ones will be ignored.

    Note
    Specifying the list of components is ways faster than an opaque copy.
    Template Parameters
    @@ -826,6 +769,67 @@ template<typename... Component, typename... Exclude>

    Definition at line 620 of file registry.hpp.

    + + + +

    ◆ create() [3/4]

    + +
    +
    +
    +template<typename Entity>
    +
    +template<typename... Component, typename It >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    auto entt::basic_registry< Entity >::create (It first,
    It last 
    )
    +
    +inline
    +
    + +

    Assigns each element in a range an entity.

    +
    See also
    create
    +

    The components must be at least move and default insertable. A compilation error will occur otherwhise.

    +
    Template Parameters
    + + + +
    ComponentTypes of components to assign to the entity.
    ItType of forward iterator.
    +
    +
    +
    Parameters
    + + + +
    firstAn iterator to the first element of the range to generate.
    lastAn iterator past the last element of the range to generate.
    +
    +
    +
    Returns
    No return value if the component list is empty, a tuple containing the iterators to the lists of components just created and sorted the same of the entities otherwise.
    + +

    Definition at line 591 of file registry.hpp.

    +
    @@ -885,8 +889,8 @@ template<typename... Component, typename It , typename... Exclude>

    Assigns each element in a range an entity from a prototype entity.

    -
    See also
    create
    -

    The components must be copyable for obvious reasons. The entities must be all valid.
    +

    See also
    create
    +

    The components must be copyable for obvious reasons. The entities must be all valid.
    If no components are provided, the registry will try to copy all the existing types. The non-copyable ones will be ignored.

    Note
    Specifying the list of components is ways faster than an opaque copy and uses the batch creation under the hood.
    Template Parameters
    @@ -939,7 +943,7 @@ template<typename Type >

    Returns a reference to an object in the context of the registry.

    -
    Warning
    Attempting to get a context variable that doesn't exist results in undefined behavior.
    +
    Warning
    Attempting to get a context variable that doesn't exist results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid requests.
    Template Parameters
    @@ -981,7 +985,7 @@ template<typename Type >

    Returns a reference to an object in the context of the registry.

    -
    Warning
    Attempting to get a context variable that doesn't exist results in undefined behavior.
    +
    Warning
    Attempting to get a context variable that doesn't exist results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid requests.
    Template Parameters
    @@ -1071,7 +1075,7 @@ template<typename Entity>

    Returns the actual version for an entity identifier.

    -
    Warning
    Attempting to use an entity that doesn't belong to the registry results in undefined behavior. An entity belongs to the registry even if it has been previously destroyed and/or recycled.
    +
    Warning
    Attempting to use an entity that doesn't belong to the registry results in undefined behavior. An entity belongs to the registry even if it has been previously destroyed and/or recycled.
    An assertion will abort the execution at runtime in debug mode if the registry doesn't own the given entity.
    Parameters
    @@ -1157,7 +1161,7 @@ template<typename Entity>

    When an entity is destroyed, its version is updated and the identifier can be recycled at any time. In case entity identifers are stored around, the valid member function can be used to know if they are still valid or the entity has been destroyed and potentially recycled.

    Warning
    In case there are listeners that observe the destruction of components and assign other components to the entity in their bodies, the result of invoking this function may not be as expected. In the worst case, it could lead to undefined behavior. An assertion will abort the execution at runtime in debug mode if a violation is detected.
    -Attempting to use an invalid entity results in undefined behavior.
    +Attempting to use an invalid entity results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity.
    Parameters
    @@ -1209,7 +1213,7 @@ template<typename It >

    Destroys all the entities in a range.

    -
    See also
    destroy
    +
    See also
    destroy
    Template Parameters
    @@ -1257,9 +1261,10 @@ template<typename Func >

    Iterates all the entities that are still in use.

    -

    The function object is invoked for each entity that is still in use.
    +

    The function object is invoked for each entity that is still in use.
    The signature of the function should be equivalent to the following:

    -
    void(const Entity);

    This function is fairly slow and should not be used frequently. However, it's useful for iterating all the entities still in use, regardless of their components.

    +
    void(const Entity);
    +

    This function is fairly slow and should not be used frequently. However, it's useful for iterating all the entities still in use, regardless of their components.

    Template Parameters
    ItType of input iterator.
    @@ -1386,7 +1391,7 @@ template<typename... Component>

    Returns references to the given components for an entity.

    -
    Warning
    Attempting to use an invalid entity or to get a component from an entity that doesn't own it results in undefined behavior.
    +
    Warning
    Attempting to use an invalid entity or to get a component from an entity that doesn't own it results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity or if the entity doesn't own an instance of the given component.
    Template Parameters
    FuncType of the function object to invoke.
    @@ -1435,7 +1440,7 @@ template<typename... Component>

    Returns references to the given components for an entity.

    -
    Warning
    Attempting to use an invalid entity or to get a component from an entity that doesn't own it results in undefined behavior.
    +
    Warning
    Attempting to use an invalid entity or to get a component from an entity that doesn't own it results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity or if the entity doesn't own an instance of the given component.
    Template Parameters
    @@ -1494,10 +1499,11 @@ template<typename Component , typename... Args>

    Returns a reference to the given component for an entity.

    -

    In case the entity doesn't own the component, the parameters provided are used to construct it.
    +

    In case the entity doesn't own the component, the parameters provided are used to construct it.
    Equivalent to the following snippet (pseudocode):

    -
    auto &component = registry.has<Component>(entity) ? registry.get<Component>(entity) : registry.assign<Component>(entity, args...);

    Prefer this function anyway because it has slightly better performance.

    -
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    +
    auto &component = registry.has<Component>(entity) ? registry.get<Component>(entity) : registry.assign<Component>(entity, args...);
    +

    Prefer this function anyway because it has slightly better performance.

    +
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity.
    Template Parameters
    @@ -1517,10 +1523,96 @@ template<typename Component , typename... Args>

    Definition at line 836 of file registry.hpp.

    + + + +

    ◆ group() [1/4]

    + +
    +
    +
    +template<typename Entity>
    +
    +template<typename... Owned, typename... Exclude>
    +
    + + + + +
    + + + + + + + + +
    entt::basic_group<Entity, exclude_t<Exclude...>, get_t<>, Owned...> entt::basic_registry< Entity >::group (exclude_t< Exclude... >  = {})
    +
    +inline
    +
    + +

    Returns a group for the given components.

    +
    See also
    group
    +
    Template Parameters
    + + + +
    OwnedTypes of components owned by the group.
    ExcludeTypes of components used to filter the group.
    +
    +
    +
    Returns
    A newly created group.
    + +

    Definition at line 1468 of file registry.hpp.

    + +
    + + +

    ◆ group() [2/4]

    + +
    +
    +
    +template<typename Entity>
    +
    +template<typename... Owned, typename... Exclude>
    + + + + + +
    + + + + + + + + +
    entt::basic_group<Entity, exclude_t<Exclude...>, get_t<>, Owned...> entt::basic_registry< Entity >::group (exclude_t< Exclude... >  = {}) const
    +
    +inline
    +
    + +

    Returns a group for the given components.

    +
    See also
    group
    +
    Template Parameters
    + + + +
    OwnedTypes of components owned by the group.
    ExcludeTypes of components used to filter the group.
    +
    +
    +
    Returns
    A newly created group.
    + +

    Definition at line 1482 of file registry.hpp.

    +
    -

    ◆ group() [1/4]

    +

    ◆ group() [3/4]

    @@ -1558,10 +1650,10 @@ template<typename... Owned, typename... Get, typename... Exclude>

    Returns a group for the given components.

    -

    This kind of objects are created on the fly and share with the registry its internal data structures.
    - Feel free to discard a group after the use. Creating and destroying a group is an incredibly cheap operation because they do not require any type of initialization, but for the first time they are requested.
    +

    This kind of objects are created on the fly and share with the registry its internal data structures.
    + Feel free to discard a group after the use. Creating and destroying a group is an incredibly cheap operation because they do not require any type of initialization, but for the first time they are requested.
    As a rule of thumb, storing a group should never be an option.

    -

    Groups support exclusion lists and can own types of components. The more types are owned by a group, the faster it is to iterate entities and components.
    +

    Groups support exclusion lists and can own types of components. The more types are owned by a group, the faster it is to iterate entities and components.
    However, groups also affect some features of the registry such as the creation and destruction of components, which will consequently be slightly slower (nothing that can be noticed in most cases).

    Note
    Pools of components that are owned by a group cannot be sorted anymore. The group takes the ownership of the pools and arrange components so as to iterate them as fast as possible.
    Template Parameters
    @@ -1579,7 +1671,7 @@ template<typename... Owned, typename... Get, typename... Exclude>
    -

    ◆ group() [2/4]

    +

    ◆ group() [4/4]

    @@ -1617,7 +1709,7 @@ template<typename... Owned, typename... Get, typename... Exclude>

    Returns a group for the given components.

    -
    See also
    group
    +
    See also
    group
    Template Parameters
    @@ -1630,92 +1722,6 @@ template<typename... Owned, typename... Get, typename... Exclude>

    Definition at line 1453 of file registry.hpp.

    - - - -

    ◆ group() [3/4]

    - -
    -
    -
    -template<typename Entity>
    -
    -template<typename... Owned, typename... Exclude>
    -
    OwnedTypes of components owned by the group.
    - - - - -
    - - - - - - - - -
    entt::basic_group<Entity, exclude_t<Exclude...>, get_t<>, Owned...> entt::basic_registry< Entity >::group (exclude_t< Exclude... >  = {})
    -
    -inline
    -
    - -

    Returns a group for the given components.

    -
    See also
    group
    -
    Template Parameters
    - - - -
    OwnedTypes of components owned by the group.
    ExcludeTypes of components used to filter the group.
    -
    -
    -
    Returns
    A newly created group.
    - -

    Definition at line 1468 of file registry.hpp.

    - -
    - - -

    ◆ group() [4/4]

    - -
    -
    -
    -template<typename Entity>
    -
    -template<typename... Owned, typename... Exclude>
    - - - - - -
    - - - - - - - - -
    entt::basic_group<Entity, exclude_t<Exclude...>, get_t<>, Owned...> entt::basic_registry< Entity >::group (exclude_t< Exclude... >  = {}) const
    -
    -inline
    -
    - -

    Returns a group for the given components.

    -
    See also
    group
    -
    Template Parameters
    - - - -
    OwnedTypes of components owned by the group.
    ExcludeTypes of components used to filter the group.
    -
    -
    -
    Returns
    A newly created group.
    - -

    Definition at line 1482 of file registry.hpp.

    -
    @@ -1747,7 +1753,7 @@ template<typename... Component>

    Checks if an entity has all the given components.

    -
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    +
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity.
    Template Parameters
    @@ -1793,7 +1799,7 @@ template<typename Entity>

    Returns a temporary object to use to load snapshots.

    -

    A snapshot is either a full or a partial dump of a registry.
    +

    A snapshot is either a full or a partial dump of a registry.
    It can be used to save and restore its internal state or to keep two or more instances of this class in sync, as an example in a client-server architecture.

    Note
    The loader returned by this function requires that the registry be empty. In case it isn't, all the data will be automatically deleted before to return.
    Returns
    A temporary object to use to load snasphosts.
    @@ -1830,12 +1836,13 @@ template<typename Component >

    Returns a sink object for the given component.

    -

    A sink is an opaque object used to connect listeners to components.
    +

    A sink is an opaque object used to connect listeners to components.
    The sink returned by this function can be used to receive notifications whenever a new instance of the given component is created and assigned to an entity.

    The function type for a listener is equivalent to:

    -
    void(Entity, registry<Entity> &, Component &);

    Listeners are invoked after the component has been assigned to the entity. The order of invocation of the listeners isn't guaranteed.

    +
    void(Entity, registry<Entity> &, Component &);
    +

    Listeners are invoked after the component has been assigned to the entity. The order of invocation of the listeners isn't guaranteed.

    Note
    Empty types aren't explicitly instantiated. Therefore, temporary objects are returned through signals. They can be caught only by copy or with const references.
    -
    See also
    sink
    +
    See also
    sink
    Template Parameters
    @@ -1876,12 +1883,13 @@ template<typename Component >

    Returns a sink object for the given component.

    -

    A sink is an opaque object used to connect listeners to components.
    +

    A sink is an opaque object used to connect listeners to components.
    The sink returned by this function can be used to receive notifications whenever an instance of the given component is removed from an entity and thus destroyed.

    The function type for a listener is equivalent to:

    -
    void(Entity, registry<Entity> &);

    Listeners are invoked before the component has been removed from the entity. The order of invocation of the listeners isn't guaranteed.

    +
    void(Entity, registry<Entity> &);
    +

    Listeners are invoked before the component has been removed from the entity. The order of invocation of the listeners isn't guaranteed.

    Note
    Empty types aren't explicitly instantiated. Therefore, temporary objects are returned through signals. They can be caught only by copy or with const references.
    -
    See also
    sink
    +
    See also
    sink
    Template Parameters
    ComponentType of component of which to get the sink.
    @@ -1922,12 +1930,13 @@ template<typename Component >

    Returns a sink object for the given component.

    -

    A sink is an opaque object used to connect listeners to components.
    +

    A sink is an opaque object used to connect listeners to components.
    The sink returned by this function can be used to receive notifications whenever an instance of the given component is explicitly replaced.

    The function type for a listener is equivalent to:

    -
    void(Entity, registry<Entity> &, Component &);

    Listeners are invoked before the component has been replaced. The order of invocation of the listeners isn't guaranteed.

    +
    void(Entity, registry<Entity> &, Component &);
    +

    Listeners are invoked before the component has been replaced. The order of invocation of the listeners isn't guaranteed.

    Note
    Empty types aren't explicitly instantiated. Therefore, temporary objects are returned through signals. They can be caught only by copy or with const references.
    -
    See also
    sink
    +
    See also
    sink
    Template Parameters
    ComponentType of component of which to get the sink.
    @@ -2039,9 +2048,10 @@ template<typename Func >

    Iterates orphans and applies them the given function object.

    -

    The function object is invoked for each entity that is still in use and has no components assigned.
    +

    The function object is invoked for each entity that is still in use and has no components assigned.
    The signature of the function should be equivalent to the following:

    -
    void(const Entity);

    This function can be very slow and should not be used frequently.

    +
    void(const Entity);
    +

    This function can be very slow and should not be used frequently.

    Template Parameters
    ComponentType of component of which to get the sink.
    @@ -2213,7 +2223,7 @@ template<typename Component >

    Removes the given component from an entity.

    -
    Warning
    Attempting to use an invalid entity or to remove a component from an entity that doesn't own it results in undefined behavior.
    +
    Warning
    Attempting to use an invalid entity or to remove a component from an entity that doesn't own it results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity or if the entity doesn't own an instance of the given component.
    Template Parameters
    FuncType of the function object to invoke.
    @@ -2272,7 +2282,7 @@ template<typename Component , typename... Args>

    Replaces the given component for an entity.

    A new instance of the given component is created and initialized with the arguments provided (the component must have a proper constructor or be of aggregate type). Then the component is assigned to the given entity.

    -
    Warning
    Attempting to use an invalid entity or to replace a component of an entity that doesn't own it results in undefined behavior.
    +
    Warning
    Attempting to use an invalid entity or to replace a component of an entity that doesn't own it results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity or if the entity doesn't own an instance of the given component.
    Template Parameters
    @@ -2323,7 +2333,7 @@ template<typename... Component>

    Increases the capacity of the registry or of the pools for the given components.

    -

    If no components are specified, the capacity of the registry is increased, that is the number of entities it contains. Otherwise the capacity of the pools for the given components is increased.
    +

    If no components are specified, the capacity of the registry is increased, that is the number of entities it contains. Otherwise the capacity of the pools for the given components is increased.
    In both cases, if the new capacity is greater than the current capacity, new storage is allocated, otherwise the method does nothing.

    Template Parameters
    @@ -2340,59 +2350,10 @@ template<typename... Component>

    Definition at line 392 of file registry.hpp.

    - - - -

    ◆ reset() [1/3]

    - -
    -
    -
    -template<typename Entity>
    -
    -template<typename Component >
    -
    - - - - -
    - - - - - - - - -
    void entt::basic_registry< Entity >::reset (const entity_type entity)
    -
    -inline
    -
    - -

    Resets the given component for an entity.

    -

    If the entity has an instance of the component, this function removes the component from the entity. Otherwise it does nothing.

    -
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    - An assertion will abort the execution at runtime in debug mode in case of invalid entity.
    -
    Template Parameters
    - - -
    ComponentType of component to reset.
    -
    -
    -
    Parameters
    - - -
    entityA valid entity identifier.
    -
    -
    - -

    Definition at line 1136 of file registry.hpp.

    -
    -

    ◆ reset() [2/3]

    +

    ◆ reset() [1/3]

    @@ -2432,7 +2393,7 @@ template<typename Component >
    -

    ◆ reset() [3/3]

    +

    ◆ reset() [2/3]

    @@ -2461,6 +2422,55 @@ template<typename Entity>

    Definition at line 1172 of file registry.hpp.

    +
    + + +

    ◆ reset() [3/3]

    + +
    +
    +
    +template<typename Entity>
    +
    +template<typename Component >
    + + + + + +
    + + + + + + + + +
    void entt::basic_registry< Entity >::reset (const entity_type entity)
    +
    +inline
    +
    + +

    Resets the given component for an entity.

    +

    If the entity has an instance of the component, this function removes the component from the entity. Otherwise it does nothing.

    +
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    + An assertion will abort the execution at runtime in debug mode in case of invalid entity.
    +
    Template Parameters
    + + +
    ComponentType of component to reset.
    +
    +
    +
    Parameters
    + + +
    entityA valid entity identifier.
    +
    +
    + +

    Definition at line 1136 of file registry.hpp.

    +
    @@ -2502,10 +2512,10 @@ template<typename It >

    Returns a runtime view for the given components.

    -

    This kind of objects are created on the fly and share with the registry its internal data structures.
    - Users should throw away the view after use. Fortunately, creating and destroying a runtime view is an incredibly cheap operation because they do not require any type of initialization.
    +

    This kind of objects are created on the fly and share with the registry its internal data structures.
    + Users should throw away the view after use. Fortunately, creating and destroying a runtime view is an incredibly cheap operation because they do not require any type of initialization.
    As a rule of thumb, storing a view should never be an option.

    -

    Runtime views are to be used when users want to construct a view from some external inputs and don't know at compile-time what are the required components.
    +

    Runtime views are to be used when users want to construct a view from some external inputs and don't know at compile-time what are the required components.
    This is particularly well suited to plugin systems and mods in general.

    Template Parameters
    @@ -2712,16 +2722,67 @@ template<typename Entity>

    Returns a temporary object to use to create snapshots.

    -

    A snapshot is either a full or a partial dump of a registry.
    +

    A snapshot is either a full or a partial dump of a registry.
    It can be used to save and restore its internal state or to keep two or more instances of this class in sync, as an example in a client-server architecture.

    Returns
    A temporary object to use to take snasphosts.

    Definition at line 1669 of file registry.hpp.

    +
    + + +

    ◆ sort() [1/2]

    + +
    +
    +
    +template<typename Entity>
    +
    +template<typename To , typename From >
    +
    + + + + +
    + + + + + + + +
    void entt::basic_registry< Entity >::sort ()
    +
    +inline
    +
    + +

    Sorts two pools of components in the same way.

    +

    The order of the elements in a pool is highly affected by assignments of components to entities and deletions. Components are arranged to maximize the performance during iterations and users should not make any assumption on the order.

    +

    It happens that different pools of components must be sorted the same way because of runtime and/or performance constraints. This function can be used to order a pool of components according to the order between the entities in another pool of components.

    +

    How it works

    +

    Being A and B the two sets where B is the master (the one the order of which rules) and A is the slave (the one to sort), after a call to this function an iterator for A will return the entities according to the following rules:

    +
      +
    • All the entities in A that are also in B are returned first according to the order they have in B.
    • +
    • All the entities in A that are not in B are returned in no particular order after all the other entities.
    • +
    +

    Any subsequent change to B won't affect the order in A.

    +
    Warning
    Pools of components owned by a group cannot be sorted.
    + An assertion will abort the execution at runtime in debug mode in case the pool is owned by a group.
    +
    Template Parameters
    + + + +
    ToType of components to sort.
    FromType of components to use to sort.
    +
    +
    + +

    Definition at line 1115 of file registry.hpp.

    +
    -

    ◆ sort() [1/2]

    +

    ◆ sort() [2/2]

    @@ -2765,10 +2826,12 @@ template<typename Component , typename Compare , typename Sort = std_sort, t

    Sorts the pool of entities for the given component.

    -

    The order of the elements in a pool is highly affected by assignments of components to entities and deletions. Components are arranged to maximize the performance during iterations and users should not make any assumption on the order.
    +

    The order of the elements in a pool is highly affected by assignments of components to entities and deletions. Components are arranged to maximize the performance during iterations and users should not make any assumption on the order.
    This function can be used to impose an order to the elements in the pool of the given component. The order is kept valid until a component of the given type is assigned or removed from an entity.

    The comparison function object must return true if the first element is less than the second one, false otherwise. The signature of the comparison function should be equivalent to one of the following:

    -
    bool(const Entity, const Entity);
    bool(const Component &, const Component &);

    Moreover, the comparison function object shall induce a strict weak ordering on the values.

    +
    bool(const Entity, const Entity);
    +
    bool(const Component &, const Component &);
    +

    Moreover, the comparison function object shall induce a strict weak ordering on the values.

    The sort function oject must offer a member function template operator() that accepts three arguments:

    • An iterator to the first element of the range to sort.
    • @@ -2776,7 +2839,7 @@ template<typename Component , typename Compare , typename Sort = std_sort, t
    • A comparison function to use to compare the elements.

    The comparison funtion object received by the sort function object hasn't necessarily the type of the one passed along with the other parameters to this member function.

    -
    Warning
    Pools of components owned by a group cannot be sorted.
    +
    Warning
    Pools of components owned by a group cannot be sorted.
    An assertion will abort the execution at runtime in debug mode in case the pool is owned by a group.
    Template Parameters
    @@ -2798,57 +2861,6 @@ template<typename Component , typename Compare , typename Sort = std_sort, t

    Definition at line 1073 of file registry.hpp.

    - - - -

    ◆ sort() [2/2]

    - -
    -
    -
    -template<typename Entity>
    -
    -template<typename To , typename From >
    -
    - - - - -
    - - - - - - - -
    void entt::basic_registry< Entity >::sort ()
    -
    -inline
    -
    - -

    Sorts two pools of components in the same way.

    -

    The order of the elements in a pool is highly affected by assignments of components to entities and deletions. Components are arranged to maximize the performance during iterations and users should not make any assumption on the order.

    -

    It happens that different pools of components must be sorted the same way because of runtime and/or performance constraints. This function can be used to order a pool of components according to the order between the entities in another pool of components.

    -

    How it works

    -

    Being A and B the two sets where B is the master (the one the order of which rules) and A is the slave (the one to sort), after a call to this function an iterator for A will return the entities according to the following rules:

    -
      -
    • All the entities in A that are also in B are returned first according to the order they have in B.
    • -
    • All the entities in A that are not in B are returned in no particular order after all the other entities.
    • -
    -

    Any subsequent change to B won't affect the order in A.

    -
    Warning
    Pools of components owned by a group cannot be sorted.
    - An assertion will abort the execution at runtime in debug mode in case the pool is owned by a group.
    -
    Template Parameters
    - - - -
    ToType of components to sort.
    FromType of components to use to sort.
    -
    -
    - -

    Definition at line 1115 of file registry.hpp.

    -
    @@ -2942,13 +2954,13 @@ template<typename... Component, typename... Exclude>

    Stomps an entity and its components.

    -

    The components must be copyable for obvious reasons. The entities must be both valid.
    +

    The components must be copyable for obvious reasons. The entities must be both valid.
    If no components are provided, the registry will try to copy all the existing types. The non-copyable ones will be ignored.

    This feature supports exclusion lists as an alternative to component lists. An excluded type will never be copied.

    -
    Warning
    Attempting to copy components that aren't copyable results in unexpected behaviors.
    +
    Warning
    Attempting to copy components that aren't copyable results in unexpected behaviors.
    A static assertion will abort the compilation when the components provided aren't copy constructible. Otherwise, an assertion will abort the execution at runtime in debug mode in case one or more types cannot be copied.
    -Attempting to use invalid entities results in undefined behavior.
    +Attempting to use invalid entities results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entities.
    Template Parameters
    @@ -3027,7 +3039,7 @@ template<typename... Component, typename It , typename... Exclude>

    Stomps the entities in a range and their components.

    -
    See also
    stomp
    +
    See also
    stomp
    Template Parameters
    @@ -3159,7 +3171,7 @@ template<typename... Component>

    Returns pointers to the given components for an entity.

    -
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    +
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity.
    Template Parameters
    ComponentTypes of components to copy.
    @@ -3208,7 +3220,7 @@ template<typename... Component>

    Returns pointers to the given components for an entity.

    -
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    +
    Warning
    Attempting to use an invalid entity results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case of invalid entity.
    Template Parameters
    @@ -3256,7 +3268,7 @@ template<typename Component >

    Returns the opaque identifier of a component.

    -

    The given component doesn't need to be necessarily in use.
    +

    The given component doesn't need to be necessarily in use.
    Identifiers aren't guaranteed to be stable between different runs.

    Template Parameters
    @@ -3264,7 +3276,7 @@ template<typename Component >
    -
    Returns
    Runtime the opaque identifier of the given type of component.
    +
    Returns
    The opaque identifier of the given type of component.

    Definition at line 332 of file registry.hpp.

    @@ -3416,8 +3428,8 @@ template<typename... Component, typename... Exclude>

    Returns a view for the given components.

    -

    This kind of objects are created on the fly and share with the registry its internal data structures.
    - Feel free to discard a view after the use. Creating and destroying a view is an incredibly cheap operation because they do not require any type of initialization.
    +

    This kind of objects are created on the fly and share with the registry its internal data structures.
    + Feel free to discard a view after the use. Creating and destroying a view is an incredibly cheap operation because they do not require any type of initialization.
    As a rule of thumb, storing a view should never be an option.

    Views do their best to iterate the smallest set of candidate entities. In particular:

      @@ -3425,7 +3437,7 @@ template<typename... Component, typename... Exclude>
  • Multi component views look at the number of entities available for each component and pick up a reference to the smallest set of candidates to test for the given components.
  • Views in no way affect the functionalities of the registry nor those of the underlying pools.

    -
    Note
    Multi component views are pretty fast. However their performance tend to degenerate when the number of components to iterate grows up and the most of the entities have all the given components.
    +
    Note
    Multi component views are pretty fast. However their performance tend to degenerate when the number of components to iterate grows up and the most of the entities have all the given components.
    To get a performance boost, consider using a group instead.
    Template Parameters
    @@ -3469,8 +3481,8 @@ template<typename... Component, typename... Exclude>

    Returns a view for the given components.

    -

    This kind of objects are created on the fly and share with the registry its internal data structures.
    - Feel free to discard a view after the use. Creating and destroying a view is an incredibly cheap operation because they do not require any type of initialization.
    +

    This kind of objects are created on the fly and share with the registry its internal data structures.
    + Feel free to discard a view after the use. Creating and destroying a view is an incredibly cheap operation because they do not require any type of initialization.
    As a rule of thumb, storing a view should never be an option.

    Views do their best to iterate the smallest set of candidate entities. In particular:

      @@ -3478,7 +3490,7 @@ template<typename... Component, typename... Exclude>
  • Multi component views look at the number of entities available for each component and pick up a reference to the smallest set of candidates to test for the given components.
  • Views in no way affect the functionalities of the registry nor those of the underlying pools.

    -
    Note
    Multi component views are pretty fast. However their performance tend to degenerate when the number of components to iterate grows up and the most of the entities have all the given components.
    +
    Note
    Multi component views are pretty fast. However their performance tend to degenerate when the number of components to iterate grows up and the most of the entities have all the given components.
    To get a performance boost, consider using a group instead.
    Template Parameters
    @@ -3498,11 +3510,13 @@ template<typename... Component, typename... Exclude>
  • src/entt/entity/registry.hpp
  • +
    basic_registry< entity > registry
    Alias declaration for the most common use case.
    Definition: fwd.hpp:54
    +
    static entity_type entity(const entity_type entity) ENTT_NOEXCEPT
    Returns the entity identifier without the version.
    Definition: registry.hpp:510
    diff --git a/classentt_1_1basic__runtime__view-members.html b/classentt_1_1basic__runtime__view-members.html index e6cc74343..6e54b630c 100644 --- a/classentt_1_1basic__runtime__view-members.html +++ b/classentt_1_1basic__runtime__view-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

    size_type size () const ENTT_NOEXCEPT - Estimates the number of entities that have the given components. More...
    + Estimates the number of entities that have the given components. More...
      bool empty () const ENTT_NOEXCEPT - Checks if the view is definitely empty. More...
    + Checks if the view is definitely empty. More...
      iterator_type begin () const ENTT_NOEXCEPT - Returns an iterator to the first entity that has the given components. More...
    + Returns an iterator to the first entity that has the given components. More...
      iterator_type end () const ENTT_NOEXCEPT - Returns an iterator that is past the last entity that has the given components. More...
    + Returns an iterator that is past the last entity that has the given components. More...
      bool contains (const entity_type entt) const ENTT_NOEXCEPT - Checks if a view contains an entity. More...
    + Checks if a view contains an entity. More...
      template<typename Func > void each (Func func) const - Iterates entities and applies the given function object to them. More...
    + Iterates entities and applies the given function object to them. More...
      @@ -30,18 +30,21 @@

    @@ -128,8 +131,8 @@ class 

    sparse_set and its specializations for more details.

    +

    Runtime views iterate over those entities that have at least all the given components in their bags. During initialization, a runtime view looks at the number of entities available for each component and picks up a reference to the smallest set of candidate entities in order to get a performance boost when iterate.
    + Order of elements during iterations are highly dependent on the order of the underlying data structures. See sparse_set and its specializations for more details.

    Important

    Iterators aren't invalidated if:

      @@ -142,7 +145,7 @@ class entt::basic_runtime_view< Entity >
      Warning
      Lifetime of a view must overcome the one of the registry that generated it. In any other case, attempting to use a view results in undefined behavior.
      Template Parameters
      - +
      EntityA valid entity type (see entt_traits for more details).
      EntityA valid entity type (see entt_traits for more details).
      @@ -175,7 +178,7 @@ template<typename Entity >

      Returns an iterator to the first entity that has the given components.

      -

      The returned iterator points to the first entity that has the given components. If the view is empty, the returned iterator will be equal to end().

      +

      The returned iterator points to the first entity that has the given components. If the view is empty, the returned iterator will be equal to end().

      Note
      Input iterators stay true to the order imposed to the underlying data structures.
      Returns
      An iterator to the first entity that has the given components.
      @@ -251,9 +254,10 @@ template<typename Func >

      Iterates entities and applies the given function object to them.

      -

      The function object is invoked for each entity. It is provided only with the entity itself. To get the components, users can use the registry with which the view was built.
      +

      The function object is invoked for each entity. It is provided only with the entity itself. To get the components, users can use the registry with which the view was built.
      The signature of the function should be equivalent to the following:

      -
      void(const entity_type);
      Template Parameters
      +
      void(const entity_type);
      +
      Template Parameters
      FuncType of the function object to invoke.
      @@ -373,11 +377,12 @@ template<typename Entity >
    • src/entt/entity/runtime_view.hpp
    +
    Entity entity_type
    Underlying entity identifier.
    diff --git a/classentt_1_1basic__snapshot-members.html b/classentt_1_1basic__snapshot-members.html index 311135ad7..cbaf3f2a3 100644 --- a/classentt_1_1basic__snapshot-members.html +++ b/classentt_1_1basic__snapshot-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */ - + +/* @license-end */
     Default move constructor.
      basic_snapshotoperator= (basic_snapshot &&)=default - Default move assignment operator. More...
    + Default move assignment operator. More...
      template<typename Archive > const basic_snapshotentities (Archive &archive) const - Puts aside all the entities that are still in use. More...
    + Puts aside all the entities that are still in use. More...
      template<typename Archive > const basic_snapshotdestroyed (Archive &archive) const - Puts aside destroyed entities. More...
    + Puts aside destroyed entities. More...
      template<typename... Component, typename Archive > const basic_snapshotcomponent (Archive &archive) const - Puts aside the given components. More...
    + Puts aside the given components. More...
      template<typename... Component, typename Archive , typename It > const basic_snapshotcomponent (Archive &archive, It first, It last) const - Puts aside the given components for the entities in a range. More...
    + Puts aside the given components for the entities in a range. More...
      @@ -30,18 +30,21 @@

    @@ -115,11 +118,11 @@ class 

    Template Parameters
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -379,7 +382,7 @@ template<typename Entity >
    diff --git a/classentt_1_1basic__snapshot__loader-members.html b/classentt_1_1basic__snapshot__loader-members.html index f9c430e1c..ea1246290 100644 --- a/classentt_1_1basic__snapshot__loader-members.html +++ b/classentt_1_1basic__snapshot__loader-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */ - + +/* @license-end */
     Default move constructor.
      basic_snapshot_loaderoperator= (basic_snapshot_loader &&)=default - Default move assignment operator. More...
    + Default move assignment operator. More...
      template<typename Archive > const basic_snapshot_loaderentities (Archive &archive) const - Restores entities that were in use during serialization. More...
    + Restores entities that were in use during serialization. More...
      template<typename Archive > const basic_snapshot_loaderdestroyed (Archive &archive) const - Restores entities that were destroyed during serialization. More...
    + Restores entities that were destroyed during serialization. More...
      template<typename... Component, typename Archive > const basic_snapshot_loadercomponent (Archive &archive) const - Restores components and assigns them to the right entities. More...
    + Restores components and assigns them to the right entities. More...
      const basic_snapshot_loaderorphans () const - Destroys those entities that have no components. More...
    + Destroys those entities that have no components. More...
      @@ -30,18 +30,21 @@

    @@ -114,11 +117,11 @@ class 

    Template Parameters
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -327,7 +330,7 @@ template<typename Entity >

    Destroys those entities that have no components.

    -

    In case all the entities were serialized but only part of the components was saved, it could happen that some of the entities have no components once restored.
    +

    In case all the entities were serialized but only part of the components was saved, it could happen that some of the entities have no components once restored.
    This functions helps to identify and destroy those entities.

    Returns
    A valid loader to continue restoring data.
    @@ -344,7 +347,7 @@ template<typename Entity >
    diff --git a/classentt_1_1basic__storage-members.html b/classentt_1_1basic__storage-members.html index 3fcd0d750..c4df2c0d4 100644 --- a/classentt_1_1basic__storage-members.html +++ b/classentt_1_1basic__storage-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */ - + +/* @license-end */
    Inheritance graph
    - - + + +
    [legend]
    @@ -91,7 +95,8 @@ Collaboration diagram for entt::basic_storage< Entity, Type, typename >:
    Collaboration graph
    - + +
    [legend]
    @@ -134,65 +139,65 @@ using  - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -293,10 +298,10 @@ class entt::basic_storage< Entity, Type, typename >
    Internal data structures arrange elements to maximize performance. Because of that, there are no guarantees that elements have the expected order when iterate directly the internal packed array (see raw and size member functions for that). Use begin and end instead.
    Warning
    Empty types aren't explicitly instantiated. Temporary objects are returned in place of the instances of the components and raw access isn't available for them.
    -
    See also
    sparse_set<Entity>
    +
    See also
    sparse_set<Entity>
    Template Parameters

    Public Member Functions

    void reserve (const size_type cap)
     Increases the capacity of a storage. More...
     Increases the capacity of a storage. More...
     
    void shrink_to_fit ()
     Requests the removal of unused capacity.
     
    const object_typeraw () const ENTT_NOEXCEPT
     Direct access to the array of objects. More...
     Direct access to the array of objects. More...
     
    object_typeraw () ENTT_NOEXCEPT
     Direct access to the array of objects. More...
     Direct access to the array of objects. More...
     
    const_iterator_type cbegin () const ENTT_NOEXCEPT
     Returns an iterator to the beginning. More...
     Returns an iterator to the beginning. More...
     
    const_iterator_type begin () const ENTT_NOEXCEPT
     Returns an iterator to the beginning. More...
     Returns an iterator to the beginning. More...
     
    iterator_type begin () ENTT_NOEXCEPT
     Returns an iterator to the beginning. More...
     Returns an iterator to the beginning. More...
     
    const_iterator_type cend () const ENTT_NOEXCEPT
     Returns an iterator to the end. More...
     Returns an iterator to the end. More...
     
    const_iterator_type end () const ENTT_NOEXCEPT
     Returns an iterator to the end. More...
     Returns an iterator to the end. More...
     
    iterator_type end () ENTT_NOEXCEPT
     Returns an iterator to the end. More...
     Returns an iterator to the end. More...
     
    const object_typeget (const entity_type entt) const ENTT_NOEXCEPT
     Returns the object associated with an entity. More...
     Returns the object associated with an entity. More...
     
    object_typeget (const entity_type entt) ENTT_NOEXCEPT
     Returns the object associated with an entity. More...
     Returns the object associated with an entity. More...
     
    const object_typetry_get (const entity_type entt) const ENTT_NOEXCEPT
     Returns a pointer to the object associated with an entity, if any. More...
     Returns a pointer to the object associated with an entity, if any. More...
     
    object_typetry_get (const entity_type entt) ENTT_NOEXCEPT
     Returns a pointer to the object associated with an entity, if any. More...
     Returns a pointer to the object associated with an entity, if any. More...
     
    template<typename... Args>
    object_typeconstruct (const entity_type entt, Args &&... args)
     Assigns an entity to a storage and constructs its object. More...
     Assigns an entity to a storage and constructs its object. More...
     
    template<typename It , typename... Args>
    iterator_type batch (It first, It last, Args &&... args)
     Assigns one or more entities to a storage and default constructs or copy constructs their objects. More...
     Assigns one or more entities to a storage and default constructs or copy constructs their objects. More...
     
    void destroy (const entity_type entt)
     Removes an entity from a storage and destroys its object. More...
     Removes an entity from a storage and destroys its object. More...
     
    void swap (const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT override
     Swaps entities and objects in the internal packed arrays. More...
     Swaps entities and objects in the internal packed arrays. More...
     
    template<typename Compare , typename Sort = std_sort, typename... Args>
    void sort (iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &&... args)
     Sort elements according to the given comparison function. More...
     Sort elements according to the given comparison function. More...
     
    void reset ()
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    TypeType of objects assigned to the entities.
    @@ -350,7 +355,7 @@ template<typename It , typename... Args>

    Assigns one or more entities to a storage and default constructs or copy constructs their objects.

    The object type must be at least move and default insertable if no arguments are provided, move and copy insertable otherwise.

    -
    Warning
    Attempting to assign an entity that already belongs to the storage results in undefined behavior.
    +
    Warning
    Attempting to assign an entity that already belongs to the storage results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode if the storage already contains the given entity.
    Template Parameters
    @@ -399,7 +404,7 @@ template<typename Entity, typename Type, typename = std::void_t<>>

    Returns an iterator to the beginning.

    -

    The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to end().

    +

    The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to end().

    Note
    Random access iterators stay true to the order imposed by a call to either sort or respect.
    Returns
    An iterator to the first instance of the given type.
    @@ -433,7 +438,7 @@ template<typename Entity, typename Type, typename = std::void_t<>>

    Returns an iterator to the beginning.

    -

    The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to end().

    +

    The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to end().

    Note
    Random access iterators stay true to the order imposed by a call to either sort or respect.
    Returns
    An iterator to the first instance of the given type.
    @@ -467,7 +472,7 @@ template<typename Entity, typename Type, typename = std::void_t<>>

    Returns an iterator to the beginning.

    -

    The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to end().

    +

    The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to end().

    Note
    Random access iterators stay true to the order imposed by a call to either sort or respect.
    Returns
    An iterator to the first instance of the given type.
    @@ -549,7 +554,7 @@ template<typename... Args>

    Assigns an entity to a storage and constructs its object.

    This version accept both types that can be constructed in place directly and types like aggregates that do not work well with a placement new as performed usually under the hood during an emplace back.

    -
    Warning
    Attempting to use an entity that already belongs to the storage results in undefined behavior.
    +
    Warning
    Attempting to use an entity that already belongs to the storage results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode if the storage already contains the given entity.
    Template Parameters
    @@ -597,7 +602,7 @@ template<typename Entity, typename Type, typename = std::void_t<>>

    Removes an entity from a storage and destroys its object.

    -
    Warning
    Attempting to use an entity that doesn't belong to the storage results in undefined behavior.
    +
    Warning
    Attempting to use an entity that doesn't belong to the storage results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode if the storage doesn't contain the given entity.
    Parameters
    @@ -705,7 +710,7 @@ template<typename Entity, typename Type, typename = std::void_t<>>

    Returns the object associated with an entity.

    -
    Warning
    Attempting to use an entity that doesn't belong to the storage results in undefined behavior.
    +
    Warning
    Attempting to use an entity that doesn't belong to the storage results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode if the storage doesn't contain the given entity.
    Parameters
    @@ -746,7 +751,7 @@ template<typename Entity, typename Type, typename = std::void_t<>>

    Returns the object associated with an entity.

    -
    Warning
    Attempting to use an entity that doesn't belong to the storage results in undefined behavior.
    +
    Warning
    Attempting to use an entity that doesn't belong to the storage results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode if the storage doesn't contain the given entity.
    Parameters
    @@ -786,7 +791,7 @@ template<typename Entity, typename Type, typename = std::void_t<>>

    Direct access to the array of objects.

    -

    The returned pointer is such that range [raw(), raw() + size()] is always a valid range, even if the container is empty.

    +

    The returned pointer is such that range [raw(), raw() + size()] is always a valid range, even if the container is empty.

    Note
    There are no guarantees on the order, even though either sort or respect has been previously invoked. Internal data structures arrange elements to maximize performance. Accessing them directly gives a performance boost but less guarantees. Use begin and end if you want to iterate the storage in the expected order.
    Returns
    A pointer to the array of objects.
    @@ -820,7 +825,7 @@ template<typename Entity, typename Type, typename = std::void_t<>>

    Direct access to the array of objects.

    -

    The returned pointer is such that range [raw(), raw() + size()] is always a valid range, even if the container is empty.

    +

    The returned pointer is such that range [raw(), raw() + size()] is always a valid range, even if the container is empty.

    Note
    There are no guarantees on the order, even though either sort or respect has been previously invoked. Internal data structures arrange elements to maximize performance. Accessing them directly gives a performance boost but less guarantees. Use begin and end if you want to iterate the storage in the expected order.
    Returns
    A pointer to the array of objects.
    @@ -926,7 +931,9 @@ template<typename Compare , typename Sort = std_sort, typename... Args> <

    Sort elements according to the given comparison function.

    Sort the elements so that iterating the range with a couple of iterators returns them in the expected order. See begin and end for more details.

    The comparison function object must return true if the first element is less than the second one, false otherwise. The signature of the comparison function should be equivalent to one of the following:

    -
    bool(const Entity, const Entity);
    bool(const Type &, const Type &);

    Moreover, the comparison function object shall induce a strict weak ordering on the values.

    +
    bool(const Entity, const Entity);
    +
    bool(const Type &, const Type &);
    +

    Moreover, the comparison function object shall induce a strict weak ordering on the values.

    The sort function oject must offer a member function template operator() that accepts three arguments:

    • An iterator to the first element of the range to sort.
    • @@ -995,7 +1002,7 @@ template<typename Entity, typename Type, typename = std::void_t<>>

    Swaps entities and objects in the internal packed arrays.

    -
    Warning
    Attempting to swap entities that don't belong to the sparse set results in undefined behavior.
    +
    Warning
    Attempting to swap entities that don't belong to the sparse set results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode if the sparse set doesn't contain the given entities.
    Parameters
    @@ -1097,7 +1104,7 @@ template<typename Entity, typename Type, typename = std::void_t<>> diff --git a/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO46f42ccdf26de3578eb8ad448af3bf58.map b/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO46f42ccdf26de3578eb8ad448af3bf58.map index b3740bd39..3946b69b2 100644 --- a/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO46f42ccdf26de3578eb8ad448af3bf58.map +++ b/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO46f42ccdf26de3578eb8ad448af3bf58.map @@ -1,3 +1,4 @@ - + + diff --git a/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO46f42ccdf26de3578eb8ad448af3bf58.md5 b/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO46f42ccdf26de3578eb8ad448af3bf58.md5 index 5e078fc44..938109263 100644 --- a/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO46f42ccdf26de3578eb8ad448af3bf58.md5 +++ b/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO46f42ccdf26de3578eb8ad448af3bf58.md5 @@ -1 +1 @@ -9766091043c1ed6c425a0009bad38f81 \ No newline at end of file +eaf8dded4961e92fe1a4a6e61e5c06fb \ No newline at end of file diff --git a/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4-members.html b/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4-members.html index 0825db0d0..85794bf9b 100644 --- a/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4-members.html +++ b/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */ - + +/* @license-end */
    Inheritance graph
    - + +
    [legend]
    @@ -90,7 +94,8 @@ Collaboration diagram for entt::basic_storage< Entity, Type, std::enable_if_t
    Collaboration graph
    - + +
    [legend]
    @@ -129,27 +134,27 @@ using  - + - + - + - + - + - + - + @@ -30,18 +30,21 @@

    Public Member Functions

    iterator_type cbegin () const ENTT_NOEXCEPT
     Returns an iterator to the beginning. More...
     Returns an iterator to the beginning. More...
     
    iterator_type begin () const ENTT_NOEXCEPT
     Returns an iterator to the beginning. More...
     Returns an iterator to the beginning. More...
     
    iterator_type cend () const ENTT_NOEXCEPT
     Returns an iterator to the end. More...
     Returns an iterator to the end. More...
     
    iterator_type end () const ENTT_NOEXCEPT
     Returns an iterator to the end. More...
     Returns an iterator to the end. More...
     
    object_type get ([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT
     Returns the object associated with an entity. More...
     Returns the object associated with an entity. More...
     
    template<typename It >
    iterator_type batch (It first, It last, const object_type &={})
     Assigns one or more entities to a storage. More...
     Assigns one or more entities to a storage. More...
     
    template<typename Compare , typename Sort = std_sort, typename... Args>
    void sort (iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &&... args)
     Sort elements according to the given comparison function. More...
     Sort elements according to the given comparison function. More...
     
    - Public Member Functions inherited from entt::sparse_set< Entity >
    @@ -249,10 +254,10 @@ class entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO
    Internal data structures arrange elements to maximize performance. Because of that, there are no guarantees that elements have the expected order when iterate directly the internal packed array (see raw and size member functions for that). Use begin and end instead.
    Warning
    Empty types aren't explicitly instantiated. Temporary objects are returned in place of the instances of the components and raw access isn't available for them.
    -
    See also
    sparse_set<Entity>
    +
    See also
    sparse_set<Entity>
    Template Parameters
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    TypeType of objects assigned to the entities.
    @@ -306,7 +311,7 @@ template<typename It >

    Assigns one or more entities to a storage.

    The object type must be at least default constructible.

    -
    Warning
    Attempting to assign an entity that already belongs to the storage results in undefined behavior.
    +
    Warning
    Attempting to assign an entity that already belongs to the storage results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode if the storage already contains the given entity.
    Template Parameters
    @@ -353,7 +358,7 @@ template<typename Entity , typename Type >

    Returns an iterator to the beginning.

    -

    The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to end().

    +

    The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to end().

    Note
    Input iterators stay true to the order imposed by a call to either sort or respect.
    Returns
    An iterator to the first instance of the given type.
    @@ -387,7 +392,7 @@ template<typename Entity , typename Type >

    Returns an iterator to the beginning.

    -

    The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to end().

    +

    The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to end().

    Note
    Input iterators stay true to the order imposed by a call to either sort or respect.
    Returns
    An iterator to the first instance of the given type.
    @@ -491,7 +496,7 @@ template<typename Entity , typename Type >

    Returns the object associated with an entity.

    Note
    Empty types aren't explicitly instantiated. Therefore, this function always returns a temporary object.
    -
    Warning
    Attempting to use an entity that doesn't belong to the storage results in undefined behavior.
    +
    Warning
    Attempting to use an entity that doesn't belong to the storage results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode if the storage doesn't contain the given entity.
    Parameters
    @@ -564,7 +569,9 @@ template<typename Compare , typename Sort = std_sort, typename... Args> <

    Sort elements according to the given comparison function.

    Sort the elements so that iterating the range with a couple of iterators returns them in the expected order. See begin and end for more details.

    The comparison function object must return true if the first element is less than the second one, false otherwise. The signature of the comparison function should be equivalent to one of the following:

    -
    bool(const Entity, const Entity);
    bool(const Type &, const Type &);

    Moreover, the comparison function object shall induce a strict weak ordering on the values.

    +
    bool(const Entity, const Entity);
    +
    bool(const Type &, const Type &);
    +

    Moreover, the comparison function object shall induce a strict weak ordering on the values.

    The sort function oject must offer a member function template operator() that accepts three arguments:

    • An iterator to the first element of the range to sort.
    • @@ -604,7 +611,7 @@ template<typename Compare , typename Sort = std_sort, typename... Args> < diff --git a/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4__coll__graph.map b/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4__coll__graph.map index b3740bd39..3946b69b2 100644 --- a/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4__coll__graph.map +++ b/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4__coll__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4__coll__graph.md5 b/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4__coll__graph.md5 index f9ce51b91..938109263 100644 --- a/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4__coll__graph.md5 +++ b/classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4__coll__graph.md5 @@ -1 +1 @@ -42c306c015c415c87a3ee904f29689fc \ No newline at end of file +eaf8dded4961e92fe1a4a6e61e5c06fb \ No newline at end of file diff --git a/classentt_1_1basic__storage__coll__graph.map b/classentt_1_1basic__storage__coll__graph.map index a4c414c02..e1bd200fd 100644 --- a/classentt_1_1basic__storage__coll__graph.map +++ b/classentt_1_1basic__storage__coll__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/classentt_1_1basic__storage__coll__graph.md5 b/classentt_1_1basic__storage__coll__graph.md5 index f0f0b7d72..408054176 100644 --- a/classentt_1_1basic__storage__coll__graph.md5 +++ b/classentt_1_1basic__storage__coll__graph.md5 @@ -1 +1 @@ -12e4fc4ffbf66bc838f249e35b053554 \ No newline at end of file +7e43a774a32bef6c89b280936431cecd \ No newline at end of file diff --git a/classentt_1_1basic__storage__inherit__graph.map b/classentt_1_1basic__storage__inherit__graph.map index fc1a4d796..c30478022 100644 --- a/classentt_1_1basic__storage__inherit__graph.map +++ b/classentt_1_1basic__storage__inherit__graph.map @@ -1,4 +1,5 @@ - - + + + diff --git a/classentt_1_1basic__storage__inherit__graph.md5 b/classentt_1_1basic__storage__inherit__graph.md5 index 1fc462d2e..e5e8a520d 100644 --- a/classentt_1_1basic__storage__inherit__graph.md5 +++ b/classentt_1_1basic__storage__inherit__graph.md5 @@ -1 +1 @@ -addce201ba3ef52c820b52aa9be1efff \ No newline at end of file +a6db981ecdea848c97b79f70530609d4 \ No newline at end of file diff --git a/classentt_1_1basic__view.html b/classentt_1_1basic__view.html index f881fe0a6..5bb6d1d14 100644 --- a/classentt_1_1basic__view.html +++ b/classentt_1_1basic__view.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::basic_view<... > Class Template Reference @@ -22,7 +22,7 @@
    @@ -30,18 +30,21 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */
    diff --git a/classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4-members.html b/classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4-members.html index 1354782e9..8929e7a70 100644 --- a/classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4-members.html +++ b/classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */ - + +/* @license-end */
    template<typename Comp > size_type size () const ENTT_NOEXCEPT - Returns the number of existing components of the given type. More...
    + Returns the number of existing components of the given type. More...
      size_type size () const ENTT_NOEXCEPT - Estimates the number of entities iterated by the view. More...
    + Estimates the number of entities iterated by the view. More...
      template<typename... Comp> bool empty () const ENTT_NOEXCEPT - Checks whether the view or the pools of the given components are empty. More...
    + Checks whether the view or the pools of the given components are empty. More...
      template<typename Comp > Comp * raw () const ENTT_NOEXCEPT - Direct access to the list of components of a given pool. More...
    + Direct access to the list of components of a given pool. More...
      template<typename Comp > const entity_typedata () const ENTT_NOEXCEPT - Direct access to the list of entities of a given pool. More...
    + Direct access to the list of entities of a given pool. More...
      iterator_type begin () const ENTT_NOEXCEPT - Returns an iterator to the first entity that has the given components. More...
    + Returns an iterator to the first entity that has the given components. More...
      iterator_type end () const ENTT_NOEXCEPT - Returns an iterator that is past the last entity that has the given components. More...
    + Returns an iterator that is past the last entity that has the given components. More...
      iterator_type find (const entity_type entt) const ENTT_NOEXCEPT - Finds an entity. More...
    + Finds an entity. More...
      bool contains (const entity_type entt) const ENTT_NOEXCEPT - Checks if a view contains an entity. More...
    + Checks if a view contains an entity. More...
      template<typename... Comp> decltype(auto) get ([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT - Returns the components assigned to the given entity. More...
    + Returns the components assigned to the given entity. More...
      template<typename Func > void each (Func func) const - Iterates entities and components and applies the given function object to them. More...
    + Iterates entities and components and applies the given function object to them. More...
      template<typename Comp , typename Func > void each (Func func) const - Iterates entities and components and applies the given function object to them. More...
    + Iterates entities and components and applies the given function object to them. More...
      template<typename Func > void less (Func func) const - Iterates entities and components and applies the given function object to them. More...
    + Iterates entities and components and applies the given function object to them. More...
      template<typename Comp , typename Func > void less (Func func) const - Iterates entities and components and applies the given function object to them. More...
    + Iterates entities and components and applies the given function object to them. More...
      @@ -30,18 +30,21 @@

    @@ -160,8 +163,8 @@ class 

    sparse_set for more details.

    +

    Multi component views iterate over those entities that have at least all the given components in their bags. During initialization, a multi component view looks at the number of entities available for each component and picks up a reference to the smallest set of candidate entities in order to get a performance boost when iterate.
    + Order of elements during iterations are highly dependent on the order of the underlying data structures. See sparse_set for more details.

    Important

    Iterators aren't invalidated if:

      @@ -174,7 +177,7 @@ class entt::basic_view< Entity, exclude_t< Exclude... >, Component... &
      Warning
      Lifetime of a view must overcome the one of the registry that generated it. In any other case, attempting to use a view results in undefined behavior.
      Template Parameters
      - +
      EntityA valid entity type (see entt_traits for more details).
      EntityA valid entity type (see entt_traits for more details).
      ExcludeTypes of components used to filter the view.
      ComponentTypes of components iterated by the view.
      @@ -209,7 +212,7 @@ template<typename Entity , typename... Exclude, typename... Component>

      Returns an iterator to the first entity that has the given components.

      -

      The returned iterator points to the first entity that has the given components. If the view is empty, the returned iterator will be equal to end().

      +

      The returned iterator points to the first entity that has the given components. If the view is empty, the returned iterator will be equal to end().

      Note
      Input iterators stay true to the order imposed to the underlying data structures.
      Returns
      An iterator to the first entity that has the given components.
      @@ -327,9 +330,11 @@ template<typename Func >

      Iterates entities and components and applies the given function object to them.

      -

      The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The constness of the components is as requested.
      +

      The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The constness of the components is as requested.
      The signature of the function must be equivalent to one of the following forms:

      -
      void(const entity_type, Component &...);
      void(Component &...);
      Note
      Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.
      +
      void(const entity_type, Component &...);
      +
      void(Component &...);
      +
      Note
      Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.
      Template Parameters
      @@ -376,9 +381,11 @@ template<typename Comp , typename Func >

      Iterates entities and components and applies the given function object to them.

      -

      The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The constness of the components is as requested.
      +

      The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The constness of the components is as requested.
      The signature of the function must be equivalent to one of the following forms:

      -
      void(const entity_type, Component &...);
      void(Component &...);

      The pool of the suggested component is used to lead the iterations. The returned entities will therefore respect the order of the pool associated with that type.
      +

      void(const entity_type, Component &...);
      +
      void(Component &...);
      +

      The pool of the suggested component is used to lead the iterations. The returned entities will therefore respect the order of the pool associated with that type.
      It is no longer guaranteed that the performance is the best possible, but there will be greater control over the order of iteration.

      Note
      Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.
      Template Parameters
      @@ -542,8 +549,8 @@ template<typename... Comp>

      Returns the components assigned to the given entity.

      -

      Prefer this function instead of registry::get during iterations. It has far better performance than its companion function.

      -
      Warning
      Attempting to use an invalid component type results in a compilation error. Attempting to use an entity that doesn't belong to the view results in undefined behavior.
      +

      Prefer this function instead of registry::get during iterations. It has far better performance than its companion function.

      +
      Warning
      Attempting to use an invalid component type results in a compilation error. Attempting to use an entity that doesn't belong to the view results in undefined behavior.
      An assertion will abort the execution at runtime in debug mode if the view doesn't contain the given entity.
      Template Parameters
      FuncType of the function object to invoke.
      @@ -592,9 +599,11 @@ template<typename Func >

      Iterates entities and components and applies the given function object to them.

      -

      The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The constness of the components is as requested.
      +

      The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The constness of the components is as requested.
      The signature of the function must be equivalent to one of the following forms:

      -
      void(const entity_type, Type &...);
      void(Type &...);
      See also
      each
      +
      void(const entity_type, Type &...);
      +
      void(Type &...);
      +
      See also
      each
      Template Parameters
      @@ -641,11 +650,13 @@ template<typename Comp , typename Func >

      Iterates entities and components and applies the given function object to them.

      -

      The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The constness of the components is as requested.
      +

      The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The constness of the components is as requested.
      The signature of the function must be equivalent to one of the following forms:

      -
      void(const entity_type, Type &...);
      void(Type &...);

      The pool of the suggested component is used to lead the iterations. The returned entities will therefore respect the order of the pool associated with that type.
      +

      void(const entity_type, Type &...);
      +
      void(Type &...);
      +

      The pool of the suggested component is used to lead the iterations. The returned entities will therefore respect the order of the pool associated with that type.
      It is no longer guaranteed that the performance is the best possible, but there will be greater control over the order of iteration.

      -
      See also
      each
      +
      See also
      each
      Template Parameters
      FuncType of the function object to invoke.
      @@ -783,11 +794,12 @@ template<typename Entity , typename... Exclude, typename... Component> src/entt/entity/view.hpp + diff --git a/classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4-members.html b/classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4-members.html index ac1e6fb39..92e8056c2 100644 --- a/classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4-members.html +++ b/classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
      CompType of component to use to enforce the iteration order.
      EnTT -  3.2.1 +  3.2.2
      - + +/* @license-end */
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */

    Public Member Functions

    size_type size () const ENTT_NOEXCEPT - Returns the number of entities that have the given component. More...
    + Returns the number of entities that have the given component. More...
      bool empty () const ENTT_NOEXCEPT - Checks whether the view is empty. More...
    + Checks whether the view is empty. More...
      raw_typeraw () const ENTT_NOEXCEPT - Direct access to the list of components. More...
    + Direct access to the list of components. More...
      const entity_typedata () const ENTT_NOEXCEPT - Direct access to the list of entities. More...
    + Direct access to the list of entities. More...
      iterator_type begin () const ENTT_NOEXCEPT - Returns an iterator to the first entity that has the given component. More...
    + Returns an iterator to the first entity that has the given component. More...
      iterator_type end () const ENTT_NOEXCEPT - Returns an iterator that is past the last entity that has the given component. More...
    + Returns an iterator that is past the last entity that has the given component. More...
      iterator_type find (const entity_type entt) const ENTT_NOEXCEPT - Finds an entity. More...
    + Finds an entity. More...
      entity_type operator[] (const size_type pos) const ENTT_NOEXCEPT - Returns the identifier that occupies the given position. More...
    + Returns the identifier that occupies the given position. More...
      bool contains (const entity_type entt) const ENTT_NOEXCEPT - Checks if a view contains an entity. More...
    + Checks if a view contains an entity. More...
      template<typename Comp = Component> decltype(auto) get (const entity_type entt) const ENTT_NOEXCEPT - Returns the component assigned to the given entity. More...
    + Returns the component assigned to the given entity. More...
      template<typename Func > void each (Func func) const - Iterates entities and components and applies the given function object to them. More...
    + Iterates entities and components and applies the given function object to them. More...
      template<typename Func > void less (Func func) const - Iterates entities and components and applies the given function object to them. More...
    + Iterates entities and components and applies the given function object to them. More...
      @@ -30,18 +30,21 @@

    @@ -151,8 +154,8 @@ class 

    sparse_set for more details.

    +

    Single component views are specialized in order to get a boost in terms of performance. This kind of views can access the underlying data structure directly and avoid superfluous checks.
    + Order of elements during iterations are highly dependent on the order of the underlying data structure. See sparse_set for more details.

    Important

    Iterators aren't invalidated if:

      @@ -165,7 +168,7 @@ class entt::basic_view< Entity, exclude_t<>, Component >
      Warning
      Lifetime of a view must overcome the one of the registry that generated it. In any other case, attempting to use a view results in undefined behavior.
      Template Parameters
      - +
      EntityA valid entity type (see entt_traits for more details).
      EntityA valid entity type (see entt_traits for more details).
      ComponentType of component iterated by the view.
      @@ -199,7 +202,7 @@ template<typename Entity , typename Component >

      Returns an iterator to the first entity that has the given component.

      -

      The returned iterator points to the first entity that has the given component. If the view is empty, the returned iterator will be equal to end().

      +

      The returned iterator points to the first entity that has the given component. If the view is empty, the returned iterator will be equal to end().

      Note
      Input iterators stay true to the order imposed to the underlying data structures.
      Returns
      An iterator to the first entity that has the given component.
      @@ -272,7 +275,7 @@ template<typename Entity , typename Component >

      Direct access to the list of entities.

      -

      The returned pointer is such that range [data(), data() + size()] is always a valid range, even if the container is empty.

      +

      The returned pointer is such that range [data(), data() + size()] is always a valid range, even if the container is empty.

      Note
      There are no guarantees on the order of the entities. Use begin and end if you want to iterate the view in the expected order.
      Returns
      A pointer to the array of entities.
      @@ -309,9 +312,11 @@ template<typename Func >

      Iterates entities and components and applies the given function object to them.

      -

      The function object is invoked for each entity. It is provided with the entity itself and a reference to its component. The constness of the component is as requested.
      +

      The function object is invoked for each entity. It is provided with the entity itself and a reference to its component. The constness of the component is as requested.
      The signature of the function must be equivalent to one of the following forms:

      -
      void(const entity_type, Component &);
      void(Component &);
      Note
      Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.
      +
      void(const entity_type, Component &);
      +
      void(Component &);
      +
      Note
      Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.
      Template Parameters
      @@ -463,8 +468,8 @@ template<typename Comp = Component>

      Returns the component assigned to the given entity.

      -

      Prefer this function instead of registry::get during iterations. It has far better performance than its companion function.

      -
      Warning
      Attempting to use an entity that doesn't belong to the view results in undefined behavior.
      +

      Prefer this function instead of registry::get during iterations. It has far better performance than its companion function.

      +
      Warning
      Attempting to use an entity that doesn't belong to the view results in undefined behavior.
      An assertion will abort the execution at runtime in debug mode if the view doesn't contain the given entity.
      Parameters
      FuncType of the function object to invoke.
      @@ -507,10 +512,14 @@ template<typename Func >

      Iterates entities and components and applies the given function object to them.

      -

      The function object is invoked for each entity. It is provided with the entity itself and a reference to its component if it's a non-empty one. The constness of the component is as requested.
      +

      The function object is invoked for each entity. It is provided with the entity itself and a reference to its component if it's a non-empty one. The constness of the component is as requested.
      The signature of the function must be equivalent to one of the following forms in case the component isn't an empty one:

      -
      void(const entity_type, Component &);
      void(Component &);

      In case the component is an empty one instead, the following forms are accepted:

      -
      void(const entity_type);
      void();
      See also
      each
      +
      void(const entity_type, Component &);
      +
      void(Component &);
      +

      In case the component is an empty one instead, the following forms are accepted:

      +
      void(const entity_type);
      +
      void();
      +
      See also
      each
      Template Parameters
      @@ -593,7 +602,7 @@ template<typename Entity , typename Component >

      Direct access to the list of components.

      -

      The returned pointer is such that range [raw(), raw() + size()] is always a valid range, even if the container is empty.

      +

      The returned pointer is such that range [raw(), raw() + size()] is always a valid range, even if the container is empty.

      Note
      There are no guarantees on the order of the components. Use begin and end if you want to iterate the view in the expected order.
      Returns
      A pointer to the array of components.
      @@ -637,11 +646,12 @@ template<typename Entity , typename Component >
    • src/entt/entity/view.hpp
    • +
      Entity entity_type
      Underlying entity identifier.
      Definition: view.hpp:564
      diff --git a/classentt_1_1connection-members.html b/classentt_1_1connection-members.html index 01972e5cb..25f0588af 100644 --- a/classentt_1_1connection-members.html +++ b/classentt_1_1connection-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
      FuncType of the function object to invoke.
      EnTT -  3.2.1 +  3.2.2
      - + +/* @license-end */
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */
    Inheritance graph
    - + +
    [legend]
    @@ -96,16 +100,16 @@ Public Member Functions - + - + - + - + @@ -191,39 +195,10 @@ template<typename >

    Definition at line 201 of file sigh.hpp.

    - - - -

    ◆ operator=() [1/2]

    - -
    -
    -
     Default copy constructor.
     
     connection (connection &&other)
     Default move constructor. More...
     Default move constructor. More...
     
    connectionoperator= (const connection &)=default
     Default copy assignment operator. More...
     Default copy assignment operator. More...
     
    connectionoperator= (connection &&other)
     Default move assignment operator. More...
     Default move assignment operator. More...
     
     operator bool () const ENTT_NOEXCEPT
     Checks whether a connection is properly initialized. More...
     Checks whether a connection is properly initialized. More...
     
    void release ()
    - - - - -
    - - - - - - - - -
    connection& entt::connection::operator= (const connection)
    -
    -default
    -
    - -

    Default copy assignment operator.

    -
    Returns
    This connection.
    -
    -

    ◆ operator=() [2/2]

    +

    ◆ operator=() [1/2]

    @@ -257,6 +232,35 @@ template<typename >

    Definition at line 187 of file sigh.hpp.

    +
    +
    + +

    ◆ operator=() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    connection& entt::connection::operator= (const connection)
    +
    +default
    +
    + +

    Default copy assignment operator.

    +
    Returns
    This connection.
    +

    The documentation for this class was generated from the following file:
      @@ -267,7 +271,7 @@ template<typename > diff --git a/classentt_1_1connection__inherit__graph.map b/classentt_1_1connection__inherit__graph.map index 06e00b7fc..46d529be6 100644 --- a/classentt_1_1connection__inherit__graph.map +++ b/classentt_1_1connection__inherit__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/classentt_1_1connection__inherit__graph.md5 b/classentt_1_1connection__inherit__graph.md5 index 0df9067fd..5229255f3 100644 --- a/classentt_1_1connection__inherit__graph.md5 +++ b/classentt_1_1connection__inherit__graph.md5 @@ -1 +1 @@ -3106a4d68675a9033e9ec1628ae3d0bd \ No newline at end of file +c9d7d30b8b49ec0c9c649edbc452dc9c \ No newline at end of file diff --git a/classentt_1_1delegate.html b/classentt_1_1delegate.html index 60e6875be..22ba47e94 100644 --- a/classentt_1_1delegate.html +++ b/classentt_1_1delegate.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::delegate< typename > Class Template Reference @@ -22,7 +22,7 @@
      EnTT -  3.2.1 +  3.2.2
      @@ -30,18 +30,21 @@ - + +/* @license-end */
      diff --git a/classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4-members.html b/classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4-members.html index 1c4989ee1..32deefb55 100644 --- a/classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4-members.html +++ b/classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
      EnTT -  3.2.1 +  3.2.2
      @@ -30,18 +30,21 @@
      - + +/* @license-end */ - + +/* @license-end */
        template<auto Function>  delegate (connect_arg_t< Function >) ENTT_NOEXCEPT - Constructs a delegate and connects a free function to it. More...
      + Constructs a delegate and connects a free function to it. More...
        template<auto Candidate, typename Type >  delegate (connect_arg_t< Candidate >, Type &value_or_instance) ENTT_NOEXCEPT - Constructs a delegate and connects a member for a given instance or a free function with payload. More...
      + Constructs a delegate and connects a member for a given instance or a free function with payload. More...
        template<auto Candidate, typename Type >  delegate (connect_arg_t< Candidate >, Type *value_or_instance) ENTT_NOEXCEPT - Constructs a delegate and connects a member for a given instance or a free function with payload. More...
      + Constructs a delegate and connects a member for a given instance or a free function with payload. More...
        template<auto Function> void connect () ENTT_NOEXCEPT - Connects a free function to a delegate. More...
      + Connects a free function to a delegate. More...
        template<auto Candidate, typename Type > void connect (Type &value_or_instance) ENTT_NOEXCEPT - Connects a member function for a given instance or a free function with payload to a delegate. More...
      + Connects a member function for a given instance or a free function with payload to a delegate. More...
        template<auto Candidate, typename Type > void connect (Type *value_or_instance) ENTT_NOEXCEPT - Connects a member function for a given instance or a free function with payload to a delegate. More...
      + Connects a member function for a given instance or a free function with payload to a delegate. More...
        void reset () ENTT_NOEXCEPT - Resets a delegate. More...
      + Resets a delegate. More...
        const void * instance () const ENTT_NOEXCEPT - Returns the instance or the payload linked to a delegate, if any. More...
      + Returns the instance or the payload linked to a delegate, if any. More...
        Ret operator() (Args... args) const - Triggers a delegate. More...
      + Triggers a delegate. More...
         operator bool () const ENTT_NOEXCEPT - Checks whether a delegate actually stores a listener. More...
      + Checks whether a delegate actually stores a listener. More...
        bool operator== (const delegate< Ret(Args...)> &other) const ENTT_NOEXCEPT - Compares the contents of two delegates. More...
      + Compares the contents of two delegates. More...
       

      Detailed Description

      @@ -370,7 +373,7 @@ template<auto Candidate, typename Type >

      Connects a member function for a given instance or a free function with payload to a delegate.

      -

      The delegate isn't responsible for the connected object or the payload. Users must always guarantee that the lifetime of the instance overcomes the one of the delegate.
      +

      The delegate isn't responsible for the connected object or the payload. Users must always guarantee that the lifetime of the instance overcomes the one of the delegate.
      When used to connect a free function with payload, its signature must be such that the instance is the first argument before the ones used to define the delegate itself.

      Template Parameters
      @@ -419,7 +422,7 @@ template<auto Candidate, typename Type >

      Connects a member function for a given instance or a free function with payload to a delegate.

      -

      The delegate isn't responsible for the connected object or the payload. Users must always guarantee that the lifetime of the instance overcomes the one of the delegate.
      +

      The delegate isn't responsible for the connected object or the payload. Users must always guarantee that the lifetime of the instance overcomes the one of the delegate.
      When used to connect a free function with payload, its signature must be such that the instance is the first argument before the ones used to define the delegate itself.

      Template Parameters
      @@ -531,7 +534,7 @@ template<typename Ret , typename... Args>

      Triggers a delegate.

      The delegate invokes the underlying function and returns the result.

      -
      Warning
      Attempting to trigger an invalid delegate results in undefined behavior.
      +
      Warning
      Attempting to trigger an invalid delegate results in undefined behavior.
      An assertion will abort the execution at runtime in debug mode if the delegate has not yet been set.
      Parameters
      @@ -624,7 +627,7 @@ template<typename Ret , typename... Args> diff --git a/classentt_1_1dispatcher-members.html b/classentt_1_1dispatcher-members.html index f0233ddfb..6e5105e30 100644 --- a/classentt_1_1dispatcher-members.html +++ b/classentt_1_1dispatcher-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
      EnTT -  3.2.1 +  3.2.2
      - + +/* @license-end */ - + +/* @license-end */
      Public Member Functions template<typename Event > sink_type< Event > sink () ENTT_NOEXCEPT - Returns a sink object for the given event. More...
      + Returns a sink object for the given event. More...
        template<typename Event , typename... Args> void trigger (Args &&... args) - Triggers an immediate event of the given type. More...
      + Triggers an immediate event of the given type. More...
        template<typename Event > void trigger (Event &&event) - Triggers an immediate event of the given type. More...
      + Triggers an immediate event of the given type. More...
        template<typename Event , typename... Args> void enqueue (Args &&... args) - Enqueues an event of the given type. More...
      + Enqueues an event of the given type. More...
        template<typename Event > void enqueue (Event &&event) - Enqueues an event of the given type. More...
      + Enqueues an event of the given type. More...
        template<typename... Event> void discard () - Discards all the events queued so far. More...
      + Discards all the events queued so far. More...
        template<typename Event > void update () - Delivers all the pending events of the given type. More...
      + Delivers all the pending events of the given type. More...
        void update () const - Delivers all the pending events. More...
      + Delivers all the pending events. More...
       

      Detailed Description

      Basic dispatcher implementation.

      -

      A dispatcher can be used either to trigger an immediate event or to enqueue events to be published all together once per tick.
      +

      A dispatcher can be used either to trigger an immediate event or to enqueue events to be published all together once per tick.
      Listeners are provided in the form of member functions. For each event of type Event, listeners are such that they can be invoked with an argument of type const Event &, no matter what the return type is.

      The types of the instances are Class &. Users must guarantee that the lifetimes of the objects overcome the one of the dispatcher itself to avoid crashes.

      @@ -284,8 +287,9 @@ template<typename Event >

      Returns a sink object for the given event.

      A sink is an opaque object used to connect listeners to events.

      -

      The function type for a listener is:

      void(const Event &);

      The order of invocation of the listeners isn't guaranteed.

      -
      See also
      sink
      +

      The function type for a listener is:

      void(const Event &);
      +

      The order of invocation of the listeners isn't guaranteed.

      +
      See also
      sink
      Template Parameters
      @@ -465,7 +469,7 @@ template<typename Event > diff --git a/classentt_1_1emitter-members.html b/classentt_1_1emitter-members.html index 9c5b145b8..f08035947 100644 --- a/classentt_1_1emitter-members.html +++ b/classentt_1_1emitter-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
      EventType of event of which to get the sink.
      EnTT -  3.2.1 +  3.2.2
      - + +/* @license-end */ - + +/* @license-end */
       Default move constructor.
       
      emitteroperator= (emitter &&)=default - Default move assignment operator. More...
      + Default move assignment operator. More...
        template<typename Event , typename... Args> void publish (Args &&... args) - Emits the given event. More...
      + Emits the given event. More...
        template<typename Event > connection< Event > on (listener< Event > instance) - Registers a long-lived listener with the event emitter. More...
      + Registers a long-lived listener with the event emitter. More...
        template<typename Event > connection< Event > once (listener< Event > instance) - Registers a short-lived listener with the event emitter. More...
      + Registers a short-lived listener with the event emitter. More...
        template<typename Event > void erase (connection< Event > conn) ENTT_NOEXCEPT - Disconnects a listener from the event emitter. More...
      + Disconnects a listener from the event emitter. More...
        template<typename Event > void clear () ENTT_NOEXCEPT - Disconnects all the listeners for the given event type. More...
      + Disconnects all the listeners for the given event type. More...
        void clear () ENTT_NOEXCEPT - Disconnects all the listeners. More...
      + Disconnects all the listeners. More...
        template<typename Event > bool empty () const ENTT_NOEXCEPT - Checks if there are listeners registered for the specific event. More...
      + Checks if there are listeners registered for the specific event. More...
        bool empty () const ENTT_NOEXCEPT - Checks if there are listeners registered with the event emitter. More...
      + Checks if there are listeners registered with the event emitter. More...
       

      Detailed Description

      @@ -146,7 +149,10 @@ class entt::emitter< Derived >

      General purpose event emitter.

      The emitter class template follows the CRTP idiom. To create a custom emitter type, derived classes must inherit directly from the base class as:

      -
      struct my_emitter: emitter<my_emitter> {
      // ...
      }

      Handlers for the type of events are created internally on the fly. It's not required to specify in advance the full list of accepted types.
      +

      struct my_emitter: emitter<my_emitter> {
      +
      // ...
      +
      }
      +

      Handlers for the type of events are created internally on the fly. It's not required to specify in advance the full list of accepted types.
      Moreover, whenever an event is published, an emitter provides the listeners with a reference to itself along with a const reference to the event. Therefore listeners have an handy way to work with it without incurring in the need of capturing a reference to the emitter.

      Template Parameters
      @@ -377,7 +383,7 @@ template<typename Event >

      Registers a long-lived listener with the event emitter.

      -

      This method can be used to register a listener designed to be invoked more than once for the given event type.
      +

      This method can be used to register a listener designed to be invoked more than once for the given event type.
      The connection returned by the method can be freely discarded. It's meant to be used later to disconnect the listener if required.

      The listener is as a callable object that can be moved and the type of which is void(const Event &, Derived &).

      Note
      Whenever an event is emitted, the emitter provides the listener with a reference to the derived class. Listeners don't have to capture those instances for later uses.
      @@ -428,7 +434,7 @@ template<typename Event >

      Registers a short-lived listener with the event emitter.

      -

      This method can be used to register a listener designed to be invoked only once for the given event type.
      +

      This method can be used to register a listener designed to be invoked only once for the given event type.
      The connection returned by the method can be freely discarded. It's meant to be used later to disconnect the listener if required.

      The listener is as a callable object that can be moved and the type of which is void(const Event &, Derived &).

      Note
      Whenever an event is emitted, the emitter provides the listener with a reference to the derived class. Listeners don't have to capture those instances for later uses.
      @@ -533,11 +539,12 @@ template<typename Event , typename... Args>
    • src/entt/signal/emitter.hpp
    • +
      emitter() ENTT_NOEXCEPT=default
      Default constructor.
      diff --git a/classentt_1_1extended__meta__factory-members.html b/classentt_1_1extended__meta__factory-members.html index facb9cb76..27ca16e2d 100644 --- a/classentt_1_1extended__meta__factory-members.html +++ b/classentt_1_1extended__meta__factory-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
      EnTT -  3.2.1 +  3.2.2
      - + +/* @license-end */ - + +/* @license-end */
      Inheritance graph
      - + +
      [legend]
      @@ -88,22 +92,23 @@ Collaboration diagram for entt::extended_meta_factory< Type, Spec >:
      Collaboration graph
      - + +
      [legend]
      - + - + - + @@ -323,7 +328,7 @@ template<typename... Property> diff --git a/classentt_1_1extended__meta__factory__coll__graph.map b/classentt_1_1extended__meta__factory__coll__graph.map index fd917d3df..141d8ab62 100644 --- a/classentt_1_1extended__meta__factory__coll__graph.map +++ b/classentt_1_1extended__meta__factory__coll__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/classentt_1_1extended__meta__factory__coll__graph.md5 b/classentt_1_1extended__meta__factory__coll__graph.md5 index ecc3d6abe..3068a7b66 100644 --- a/classentt_1_1extended__meta__factory__coll__graph.md5 +++ b/classentt_1_1extended__meta__factory__coll__graph.md5 @@ -1 +1 @@ -c8401dbf0b26e02941c25201d0c68e4c \ No newline at end of file +056fa9e57379a3c32c87445f4c6edaa4 \ No newline at end of file diff --git a/classentt_1_1extended__meta__factory__inherit__graph.map b/classentt_1_1extended__meta__factory__inherit__graph.map index fd917d3df..141d8ab62 100644 --- a/classentt_1_1extended__meta__factory__inherit__graph.map +++ b/classentt_1_1extended__meta__factory__inherit__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/classentt_1_1extended__meta__factory__inherit__graph.md5 b/classentt_1_1extended__meta__factory__inherit__graph.md5 index 3c2ad0405..3068a7b66 100644 --- a/classentt_1_1extended__meta__factory__inherit__graph.md5 +++ b/classentt_1_1extended__meta__factory__inherit__graph.md5 @@ -1 +1 @@ -ebdb475e479c463800116967656f3d5a \ No newline at end of file +056fa9e57379a3c32c87445f4c6edaa4 \ No newline at end of file diff --git a/classentt_1_1family-members.html b/classentt_1_1family-members.html index b8e4a70b2..b2cc3b0b3 100644 --- a/classentt_1_1family-members.html +++ b/classentt_1_1family-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@

      Public Member Functions

       extended_meta_factory (entt::internal::meta_prop_node **target)
       Constructs an extended factory from a given node. More...
       Constructs an extended factory from a given node. More...
       
      template<typename PropertyOrKey , typename... Value>
      auto prop (PropertyOrKey &&property_or_key, Value &&... value) &&
       Assigns a property to the last meta object created. More...
       Assigns a property to the last meta object created. More...
       
      template<typename... Property>
      auto props (Property... property) &&
       Assigns properties to the last meta object created. More...
       Assigns properties to the last meta object created. More...
       
      - Public Member Functions inherited from entt::meta_factory< Type >
      auto type (const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT
      EnTT -  3.2.1 +  3.2.2
      - + +/* @license-end */ - + +/* @license-end */
      diff --git a/classentt_1_1handle-members.html b/classentt_1_1handle-members.html index 7803f5107..4147c1eee 100644 --- a/classentt_1_1handle-members.html +++ b/classentt_1_1handle-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
      EnTT -  3.2.1 +  3.2.2
      @@ -30,18 +30,21 @@
      - + +/* @license-end */ - + +/* @license-end */
       Default constructor.
        const Resource & get () const ENTT_NOEXCEPT - Gets a reference to the managed resource. More...
      + Gets a reference to the managed resource. More...
        Resource & get () ENTT_NOEXCEPT - Gets a reference to the managed resource. More...
      + Gets a reference to the managed resource. More...
         operator const Resource & () const ENTT_NOEXCEPT - Gets a reference to the managed resource. More...
      + Gets a reference to the managed resource. More...
         operator Resource & () ENTT_NOEXCEPT - Gets a reference to the managed resource. More...
      + Gets a reference to the managed resource. More...
        const Resource & operator* () const ENTT_NOEXCEPT - Gets a reference to the managed resource. More...
      + Gets a reference to the managed resource. More...
        Resource & operator* () ENTT_NOEXCEPT - Gets a reference to the managed resource. More...
      + Gets a reference to the managed resource. More...
        const Resource * operator-> () const ENTT_NOEXCEPT - Gets a pointer to the managed resource. More...
      + Gets a pointer to the managed resource. More...
        Resource * operator-> () ENTT_NOEXCEPT - Gets a pointer to the managed resource. More...
      + Gets a pointer to the managed resource. More...
         operator bool () const - Returns true if a handle contains a resource, false otherwise. More...
      + Returns true if a handle contains a resource, false otherwise. More...
        @@ -30,18 +30,21 @@

      @@ -123,7 +126,7 @@ struct 

      Template Parameters
      @@ -160,7 +163,7 @@ template<typename Resource >

      Gets a reference to the managed resource.

      -
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      +
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      An assertion will abort the execution at runtime in debug mode if the handle is empty.
      Returns
      A reference to the managed resource.
      @@ -194,7 +197,7 @@ template<typename Resource >

      Gets a reference to the managed resource.

      -
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      +
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      An assertion will abort the execution at runtime in debug mode if the handle is empty.
      Returns
      A reference to the managed resource.
      @@ -235,7 +238,7 @@ template<typename Resource >
      -

      ◆ operator const Resource &()

      +

      ◆ operator const Resource &()

      @@ -260,7 +263,7 @@ template<typename Resource >

      Gets a reference to the managed resource.

      -
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      +
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      An assertion will abort the execution at runtime in debug mode if the handle is empty.
      Returns
      A reference to the managed resource.
      @@ -269,7 +272,7 @@ template<typename Resource >
      -

      ◆ operator Resource &()

      +

      ◆ operator Resource &()

      @@ -294,7 +297,7 @@ template<typename Resource >

      Gets a reference to the managed resource.

      -
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      +
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      An assertion will abort the execution at runtime in debug mode if the handle is empty.
      Returns
      A reference to the managed resource.
      @@ -328,7 +331,7 @@ template<typename Resource >

      Gets a reference to the managed resource.

      -
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      +
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      An assertion will abort the execution at runtime in debug mode if the handle is empty.
      Returns
      A reference to the managed resource.
      @@ -362,7 +365,7 @@ template<typename Resource >

      Gets a reference to the managed resource.

      -
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      +
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      An assertion will abort the execution at runtime in debug mode if the handle is empty.
      Returns
      A reference to the managed resource.
      @@ -371,7 +374,7 @@ template<typename Resource >
      -

      ◆ operator->() [1/2]

      +

      ◆ operator->() [1/2]

      @@ -396,7 +399,7 @@ template<typename Resource >

      Gets a pointer to the managed resource.

      -
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      +
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      An assertion will abort the execution at runtime in debug mode if the handle is empty.
      Returns
      A pointer to the managed resource or nullptr if the handle contains no resource at all.
      @@ -405,7 +408,7 @@ template<typename Resource >
      -

      ◆ operator->() [2/2]

      +

      ◆ operator->() [2/2]

      @@ -430,7 +433,7 @@ template<typename Resource >

      Gets a pointer to the managed resource.

      -
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      +
      Warning
      The behavior is undefined if the handle doesn't contain a resource.
      An assertion will abort the execution at runtime in debug mode if the handle is empty.
      Returns
      A pointer to the managed resource or nullptr if the handle contains no resource at all.
      @@ -447,7 +450,7 @@ template<typename Resource >
      diff --git a/classentt_1_1identifier-members.html b/classentt_1_1identifier-members.html index fcb1eed0d..6e78089af 100644 --- a/classentt_1_1identifier-members.html +++ b/classentt_1_1identifier-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
      EnTT -  3.2.1 +  3.2.2
      - + +/* @license-end */
      EnTT -  3.2.1 +  3.2.2
      - + +/* @license-end */

      Types identifiers.

      Variable template used to generate identifiers at compile-time for the given types. Use the get member function to know what's the identifier associated to the specific type.

      -
      Note
      Identifiers are constant expression and can be used in any context where such an expression is required. As an example:
      switch(a_type_identifier) {
      case id::type<a_type>:
      // ...
      break;
      case id::type<another_type>:
      // ...
      break;
      default:
      // ...
      }
      +
      Note
      Identifiers are constant expression and can be used in any context where such an expression is required. As an example:
      +
      +
      switch(a_type_identifier) {
      +
      case id::type<a_type>:
      +
      // ...
      +
      break;
      +
      case id::type<another_type>:
      +
      // ...
      +
      break;
      +
      default:
      +
      // ...
      +
      }
      +
      Template Parameters
      @@ -111,11 +126,12 @@ class entt::identifier< Types >
    • src/entt/core/ident.hpp
    • +
      Types identifiers.
      Definition: ident.hpp:42
      diff --git a/classentt_1_1loader-members.html b/classentt_1_1loader-members.html index ea9105416..068a4fe34 100644 --- a/classentt_1_1loader-members.html +++ b/classentt_1_1loader-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
      TypesList of types for which to generate identifiers.
      EnTT -  3.2.1 +  3.2.2
      - + +/* @license-end */ - + +/* @license-end */
      struct my_resource {};
      struct my_loader: entt::loader<my_loader, my_resource> {
      std::shared_ptr<my_resource> load(int) const {
      // use the integer value somehow
      return std::make_shared<my_resource>();
      }
      };

      In general, resource loaders should not have a state or retain data of any type. They should let the cache manage their resources instead.

      +
      struct my_resource {};
      +
      +
      struct my_loader: entt::loader<my_loader, my_resource> {
      +
      std::shared_ptr<my_resource> load(int) const {
      +
      // use the integer value somehow
      +
      return std::make_shared<my_resource>();
      +
      }
      +
      };
      +

      In general, resource loaders should not have a state or retain data of any type. They should let the cache manage their resources instead.

      Note
      Base class and CRTP idiom aren't strictly required with the current implementation. One could argue that a cache can easily work with loaders of any type. However, future changes won't be breaking ones by forcing the use of a base class today and that's why the model is already in its place.
      Template Parameters
      @@ -106,11 +117,12 @@ class entt::loader< Loader, Resource >
    • src/entt/resource/loader.hpp
    • +
      Base class for resource loaders.
      Definition: fwd.hpp:18
      diff --git a/classentt_1_1meta__any-members.html b/classentt_1_1meta__any-members.html index 9b5ee7fdb..bd04c4cef 100644 --- a/classentt_1_1meta__any-members.html +++ b/classentt_1_1meta__any-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
      EnTT -  3.2.1 +  3.2.2
      - + +/* @license-end */ - + +/* @license-end */
        template<typename Type , typename... Args>  meta_any (std::in_place_type_t< Type >, [[maybe_unused]] Args &&... args) - Constructs a meta any by directly initializing the new object. More...
      + Constructs a meta any by directly initializing the new object. More...
        template<typename Type >  meta_any (std::reference_wrapper< Type > type) - Constructs a meta any that holds an unmanaged object. More...
      + Constructs a meta any that holds an unmanaged object. More...
         meta_any (meta_handle handle) ENTT_NOEXCEPT - Constructs a meta any from a meta handle object. More...
      + Constructs a meta any from a meta handle object. More...
        template<typename Type , typename = std::enable_if_t<!std::is_same_v<std::remove_cv_t<std::remove_reference_t<Type>>, meta_any>>>  meta_any (Type &&type) - Constructs a meta any from a given value. More...
      + Constructs a meta any from a given value. More...
         meta_any (const meta_any &other) - Copy constructor. More...
      + Copy constructor. More...
         meta_any (meta_any &&other) ENTT_NOEXCEPT - Move constructor. More...
      + Move constructor. More...
         ~meta_any () @@ -111,56 +114,56 @@ Public Member Functions   template<typename Type , typename = std::enable_if_t<!std::is_same_v<std::remove_cv_t<std::remove_reference_t<Type>>, meta_any>>> meta_anyoperator= (Type &&type) - Assignment operator. More...
      + Assignment operator. More...
        meta_anyoperator= (const meta_any &other) - Copy assignment operator. More...
      + Copy assignment operator. More...
        meta_anyoperator= (meta_any &&other) ENTT_NOEXCEPT - Move assignment operator. More...
      + Move assignment operator. More...
        meta_type type () const ENTT_NOEXCEPT - Returns the meta type of the underlying object. More...
      + Returns the meta type of the underlying object. More...
        const void * data () const ENTT_NOEXCEPT - Returns an opaque pointer to the contained instance. More...
      + Returns an opaque pointer to the contained instance. More...
        void * data () ENTT_NOEXCEPT - Returns an opaque pointer to the contained instance. More...
      + Returns an opaque pointer to the contained instance. More...
        template<typename Type > const Type * try_cast () const ENTT_NOEXCEPT - Tries to cast an instance to a given type. More...
      + Tries to cast an instance to a given type. More...
        template<typename Type > Type * try_cast () ENTT_NOEXCEPT - Tries to cast an instance to a given type. More...
      + Tries to cast an instance to a given type. More...
        template<typename Type > const Type & cast () const ENTT_NOEXCEPT - Tries to cast an instance to a given type. More...
      + Tries to cast an instance to a given type. More...
        template<typename Type > Type & cast () ENTT_NOEXCEPT - Tries to cast an instance to a given type. More...
      + Tries to cast an instance to a given type. More...
        template<typename Type > meta_any convert () const - Tries to convert an instance to a given type and returns it. More...
      + Tries to convert an instance to a given type and returns it. More...
        template<typename Type > bool convert () - Tries to convert an instance to a given type. More...
      + Tries to convert an instance to a given type. More...
        template<typename Type , typename... Args> void emplace (Args &&... args) - Replaces the contained object by initializing a new instance directly. More...
      + Replaces the contained object by initializing a new instance directly. More...
         operator bool () const ENTT_NOEXCEPT - Returns false if a container is empty, true otherwise. More...
      + Returns false if a container is empty, true otherwise. More...
        bool operator== (const meta_any &other) const ENTT_NOEXCEPT - Checks if two containers differ in their content. More...
      + Checks if two containers differ in their content. More...
        - +

      @@ -170,16 +173,16 @@ class 

       A meta handle is allowed to inherit from a meta any.
       
      void swap (meta_any &lhs, meta_any &rhs) ENTT_NOEXCEPT
       Swaps two meta any objects. More...
       Swaps two meta any objects. More...
       

      Detailed Description

      Opaque container for values of any type.

      -

      TURN_OFF_DOXYGEN This class uses a technique called small buffer optimization (SBO) to completely eliminate the need to allocate memory, where possible.
      +

      TURN_OFF_DOXYGEN This class uses a technique called small buffer optimization (SBO) to completely eliminate the need to allocate memory, where possible.
      From the user's point of view, nothing will change, but the elimination of allocations will reduce the jumps in memory and therefore will avoid chasing of pointers. This will greatly improve the use of the cache, thus increasing the overall performance.

      Warning
      Only copy constructible types are suitable for use with this class. A static assertion will abort the compilation when the type provided isn't copy constructible.
      -

      Definition at line 312 of file meta.hpp.

      +

      Definition at line 311 of file meta.hpp.

      Constructor & Destructor Documentation

      ◆ meta_any() [1/6]

      @@ -232,7 +235,7 @@ template<typename Type , typename... Args>
      -

      Definition at line 395 of file meta.hpp.

      +

      Definition at line 394 of file meta.hpp.

      @@ -276,7 +279,7 @@ template<typename Type >
    -

    Definition at line 417 of file meta.hpp.

    +

    Definition at line 416 of file meta.hpp.

    @@ -312,7 +315,7 @@ template<typename Type >
    -

    Definition at line 1773 of file meta.hpp.

    +

    Definition at line 1772 of file meta.hpp.

    @@ -356,7 +359,7 @@ template<typename Type , typename = std::enable_if_t<!std::is_same_v<s
    -

    Definition at line 436 of file meta.hpp.

    +

    Definition at line 435 of file meta.hpp.

    @@ -392,7 +395,7 @@ template<typename Type , typename = std::enable_if_t<!std::is_same_v<s
    -

    Definition at line 444 of file meta.hpp.

    +

    Definition at line 443 of file meta.hpp.

    @@ -429,7 +432,7 @@ template<typename Type , typename = std::enable_if_t<!std::is_same_v<s
    -

    Definition at line 463 of file meta.hpp.

    +

    Definition at line 462 of file meta.hpp.

    @@ -461,7 +464,7 @@ template<typename Type >

    Tries to cast an instance to a given type.

    The type of the instance must be such that the cast is possible.

    -
    Warning
    Attempting to perform a cast that isn't viable results in undefined behavior.
    +
    Warning
    Attempting to perform a cast that isn't viable results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case the cast is not feasible.
    Template Parameters
    @@ -471,7 +474,7 @@ template<typename Type >
    Returns
    A reference to the contained instance.
    -

    Definition at line 570 of file meta.hpp.

    +

    Definition at line 569 of file meta.hpp.

    @@ -502,7 +505,7 @@ template<typename Type >

    Tries to cast an instance to a given type.

    The type of the instance must be such that the cast is possible.

    -
    Warning
    Attempting to perform a cast that isn't viable results in undefined behavior.
    +
    Warning
    Attempting to perform a cast that isn't viable results in undefined behavior.
    An assertion will abort the execution at runtime in debug mode in case the cast is not feasible.
    Template Parameters
    @@ -512,50 +515,12 @@ template<typename Type >
    Returns
    A reference to the contained instance.
    -

    Definition at line 578 of file meta.hpp.

    - - - - -

    ◆ convert() [1/2]

    - -
    -
    -
    -template<typename Type >
    -
    - - - - -
    - - - - - - - -
    meta_any entt::meta_any::convert () const
    -
    -inline
    -
    - -

    Tries to convert an instance to a given type and returns it.

    -
    Template Parameters
    - - -
    TypeType to which to convert the instance.
    -
    -
    -
    Returns
    A valid meta any object if the conversion is possible, an invalid one otherwise.
    - -

    Definition at line 589 of file meta.hpp.

    +

    Definition at line 577 of file meta.hpp.

    -

    ◆ convert() [2/2]

    +

    ◆ convert() [1/2]

    @@ -588,7 +553,45 @@ template<typename Type >
    Returns
    True if the conversion is possible, false otherwise.
    -

    Definition at line 613 of file meta.hpp.

    +

    Definition at line 612 of file meta.hpp.

    + + + + +

    ◆ convert() [2/2]

    + +
    +
    +
    +template<typename Type >
    + + + + + +
    + + + + + + + +
    meta_any entt::meta_any::convert () const
    +
    +inline
    +
    + +

    Tries to convert an instance to a given type and returns it.

    +
    Template Parameters
    + + +
    TypeType to which to convert the instance.
    +
    +
    +
    Returns
    A valid meta any object if the conversion is possible, an invalid one otherwise.
    + +

    Definition at line 588 of file meta.hpp.

    @@ -618,7 +621,7 @@ template<typename Type >

    Returns an opaque pointer to the contained instance.

    Returns
    An opaque pointer the contained instance, if any.
    -

    Definition at line 517 of file meta.hpp.

    +

    Definition at line 516 of file meta.hpp.

    @@ -648,7 +651,7 @@ template<typename Type >

    Returns an opaque pointer to the contained instance.

    Returns
    An opaque pointer the contained instance, if any.
    -

    Definition at line 522 of file meta.hpp.

    +

    Definition at line 521 of file meta.hpp.

    @@ -693,7 +696,7 @@ template<typename Type , typename... Args>
    -

    Definition at line 634 of file meta.hpp.

    +

    Definition at line 633 of file meta.hpp.

    @@ -723,12 +726,86 @@ template<typename Type , typename... Args>

    Returns false if a container is empty, true otherwise.

    Returns
    False if the container is empty, true otherwise.
    -

    Definition at line 642 of file meta.hpp.

    +

    Definition at line 641 of file meta.hpp.

    + + + + +

    ◆ operator=() [1/3]

    + +
    +
    + + + + + +
    + + + + + + + + +
    meta_any& entt::meta_any::operator= (const meta_anyother)
    +
    +inline
    +
    + +

    Copy assignment operator.

    +
    Parameters
    + + +
    otherThe instance to assign.
    +
    +
    +
    Returns
    This meta any object.
    + +

    Definition at line 491 of file meta.hpp.

    + +
    +
    + +

    ◆ operator=() [2/3]

    + +
    +
    + + + + + +
    + + + + + + + + +
    meta_any& entt::meta_any::operator= (meta_any && other)
    +
    +inline
    +
    + +

    Move assignment operator.

    +
    Parameters
    + + +
    otherThe instance to assign.
    +
    +
    +
    Returns
    This meta any object.
    + +

    Definition at line 500 of file meta.hpp.

    -

    ◆ operator=() [1/3]

    +

    ◆ operator=() [3/3]

    @@ -768,81 +845,7 @@ template<typename Type , typename = std::enable_if_t<!std::is_same_v<s
    Returns
    This meta any object.
    -

    Definition at line 483 of file meta.hpp.

    - -
    -
    - -

    ◆ operator=() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    meta_any& entt::meta_any::operator= (const meta_anyother)
    -
    -inline
    -
    - -

    Copy assignment operator.

    -
    Parameters
    - - -
    otherThe instance to assign.
    -
    -
    -
    Returns
    This meta any object.
    - -

    Definition at line 492 of file meta.hpp.

    - -
    -
    - -

    ◆ operator=() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    meta_any& entt::meta_any::operator= (meta_any && other)
    -
    -inline
    -
    - -

    Move assignment operator.

    -
    Parameters
    - - -
    otherThe instance to assign.
    -
    -
    -
    Returns
    This meta any object.
    - -

    Definition at line 501 of file meta.hpp.

    +

    Definition at line 482 of file meta.hpp.

    @@ -879,7 +882,7 @@ template<typename Type , typename = std::enable_if_t<!std::is_same_v<s
    Returns
    False if the two containers differ in their content, true otherwise.
    -

    Definition at line 652 of file meta.hpp.

    +

    Definition at line 651 of file meta.hpp.

    @@ -917,7 +920,7 @@ template<typename Type >
    Returns
    A (possibly null) pointer to the contained instance.
    -

    Definition at line 532 of file meta.hpp.

    +

    Definition at line 531 of file meta.hpp.

    @@ -955,7 +958,7 @@ template<typename Type >
    Returns
    A (possibly null) pointer to the contained instance.
    -

    Definition at line 551 of file meta.hpp.

    +

    Definition at line 550 of file meta.hpp.

    @@ -985,7 +988,7 @@ template<typename Type >

    Returns the meta type of the underlying object.

    Returns
    The meta type of the underlying object, if any.
    -

    Definition at line 1781 of file meta.hpp.

    +

    Definition at line 1780 of file meta.hpp.

    @@ -1033,7 +1036,7 @@ template<typename Type > -

    Definition at line 661 of file meta.hpp.

    +

    Definition at line 660 of file meta.hpp.

    @@ -1045,7 +1048,7 @@ template<typename Type > diff --git a/classentt_1_1meta__factory-members.html b/classentt_1_1meta__factory-members.html index 434298af6..6e5b8f9b5 100644 --- a/classentt_1_1meta__factory-members.html +++ b/classentt_1_1meta__factory-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */
    Inheritance graph
    - + +
    [legend]
    - + - + - + - + - + - + - + - + - + - + - + - +

    Public Member Functions

    auto type (const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT
     Extends a meta type by assigning it an identifier. More...
     Extends a meta type by assigning it an identifier. More...
     
    auto type () ENTT_NOEXCEPT
     Extends a meta type by assigning it an identifier. More...
     Extends a meta type by assigning it an identifier. More...
     
    template<typename Base >
    auto base () ENTT_NOEXCEPT
     Assigns a meta base to a meta type. More...
     Assigns a meta base to a meta type. More...
     
    template<typename To >
    auto conv () ENTT_NOEXCEPT
     Assigns a meta conversion function to a meta type. More...
     Assigns a meta conversion function to a meta type. More...
     
    template<auto Candidate>
    auto conv () ENTT_NOEXCEPT
     Assigns a meta conversion function to a meta type. More...
     Assigns a meta conversion function to a meta type. More...
     
    template<auto Func, typename Policy = as_is_t>
    auto ctor () ENTT_NOEXCEPT
     Assigns a meta constructor to a meta type. More...
     Assigns a meta constructor to a meta type. More...
     
    template<typename... Args>
    auto ctor () ENTT_NOEXCEPT
     Assigns a meta constructor to a meta type. More...
     Assigns a meta constructor to a meta type. More...
     
    template<auto Func>
    auto dtor () ENTT_NOEXCEPT
     Assigns a meta destructor to a meta type. More...
     Assigns a meta destructor to a meta type. More...
     
    template<auto Data, typename Policy = as_is_t>
    auto data (const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT
     Assigns a meta data to a meta type. More...
     Assigns a meta data to a meta type. More...
     
    template<auto Setter, auto Getter, typename Policy = as_is_t>
    auto data (const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT
     Assigns a meta data to a meta type by means of its setter and getter. More...
     Assigns a meta data to a meta type by means of its setter and getter. More...
     
    template<auto Candidate, typename Policy = as_is_t>
    auto func (const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT
     Assigns a meta funcion to a meta type. More...
     Assigns a meta funcion to a meta type. More...
     
    void reset () ENTT_NOEXCEPT
     Resets a meta type and all its parts. More...
     Resets a meta type and all its parts. More...
     

    Detailed Description

    @@ -257,7 +261,7 @@ template<auto Candidate>

    Assigns a meta conversion function to a meta type.

    -

    Conversion functions can be either free functions or member functions.
    +

    Conversion functions can be either free functions or member functions.
    In case of free functions, they must accept a const reference to an instance of the parent type as an argument. In case of member functions, they should have no arguments at all.

    Template Parameters
    @@ -299,7 +303,7 @@ template<auto Func, typename Policy = as_is_t>

    Assigns a meta constructor to a meta type.

    -

    Free functions can be assigned to meta types in the role of constructors. All that is required is that they return an instance of the underlying type.
    +

    Free functions can be assigned to meta types in the role of constructors. All that is required is that they return an instance of the underlying type.
    From a client's point of view, nothing changes if a constructor of a meta type is a built-in one or a free function.

    Template Parameters
    @@ -384,7 +388,7 @@ template<auto Data, typename Policy = as_is_t>

    Assigns a meta data to a meta type.

    -

    Both data members and static and global variables, as well as constants of any kind, can be assigned to a meta type.
    +

    Both data members and static and global variables, as well as constants of any kind, can be assigned to a meta type.
    From a client's point of view, all the variables associated with the reflected object will appear as if they were part of the type itself.

    Template Parameters
    @@ -434,8 +438,8 @@ template<auto Setter, auto Getter, typename Policy = as_is_t>

    Assigns a meta data to a meta type by means of its setter and getter.

    -

    Setters and getters can be either free functions, member functions or a mix of them.
    - In case of free functions, setters and getters must accept a reference to an instance of the parent type as their first argument. A setter has then an extra argument of a type convertible to that of the parameter to set.
    +

    Setters and getters can be either free functions, member functions or a mix of them.
    + In case of free functions, setters and getters must accept a reference to an instance of the parent type as their first argument. A setter has then an extra argument of a type convertible to that of the parameter to set.
    In case of member functions, getters have no arguments at all, while setters has an argument of a type convertible to that of the parameter to set.

    Template Parameters
    @@ -486,7 +490,8 @@ template<auto Func>

    Assigns a meta destructor to a meta type.

    Free functions can be assigned to meta types in the role of destructors. The signature of the function should identical to the following:

    -
    void(Type &);

    The purpose is to give users the ability to free up resources that require special treatment before an object is actually destroyed.

    +
    void(Type &);
    +

    The purpose is to give users the ability to free up resources that require special treatment before an object is actually destroyed.

    Template Parameters
    @@ -528,7 +533,7 @@ template<auto Candidate, typename Policy = as_is_t>

    Assigns a meta funcion to a meta type.

    -

    Both member functions and free functions can be assigned to a meta type.
    +

    Both member functions and free functions can be assigned to a meta type.
    From a client's point of view, all the functions associated with the reflected object will appear as if they were part of the type itself.

    Template Parameters
    FuncThe actual function to use as a destructor.
    @@ -575,15 +580,48 @@ template<typename Type >

    Resets a meta type and all its parts.

    -

    This function resets a meta type and all its data members, member functions and properties, as well as its constructors, destructors and conversion functions if any.
    +

    This function resets a meta type and all its data members, member functions and properties, as well as its constructors, destructors and conversion functions if any.
    Base classes aren't reset but the link between the two types is removed.

    Definition at line 680 of file factory.hpp.

    +
    + + +

    ◆ type() [1/2]

    + +
    +
    +
    +template<typename Type >
    +
    + + + + +
    + + + + + + + +
    auto entt::meta_factory< Type >::type ()
    +
    +inline
    +
    + +

    Extends a meta type by assigning it an identifier.

    +

    This function is intended only for named types

    +
    Returns
    An extended meta factory for the parent type.
    + +

    Definition at line 298 of file factory.hpp.

    +
    -

    ◆ type() [1/2]

    +

    ◆ type() [2/2]

    @@ -620,39 +658,6 @@ template<typename Type >

    Definition at line 286 of file factory.hpp.

    -
    - - -

    ◆ type() [2/2]

    - -
    -
    -
    -template<typename Type >
    - - - - - -
    - - - - - - - -
    auto entt::meta_factory< Type >::type ()
    -
    -inline
    -
    - -

    Extends a meta type by assigning it an identifier.

    -

    This function is intended only for named types

    -
    Returns
    An extended meta factory for the parent type.
    - -

    Definition at line 298 of file factory.hpp.

    -

    The documentation for this class was generated from the following file: -

    This project started off as a pure entity-component system. Over time the codebase has grown as more and more classes and functionalities were added.
    +

    This project started off as a pure entity-component system. Over time the codebase has grown as more and more classes and functionalities were added.
    Here is a brief, yet incomplete list of what it offers today:

    Consider this list a work in progress as well as the project. The whole API is fully documented in-code for those who are brave enough to read it.

    -

    Currently, EnTT is tested on Linux, Microsoft Windows and OSX. It has proven to work also on both Android and iOS.
    +

    Currently, EnTT is tested on Linux, Microsoft Windows and OSX. It has proven to work also on both Android and iOS.
    Most likely it won't be problematic on other systems as well, but it hasn't been sufficiently tested so far.

    Code Example

    -
    #include <entt/entt.hpp>
    #include <cstdint>
    struct position {
    float x;
    float y;
    };
    struct velocity {
    float dx;
    float dy;
    };
    void update(entt::registry &registry) {
    auto view = registry.view<position, velocity>();
    for(auto entity: view) {
    // gets only the components that are going to be used ...
    auto &vel = view.get<velocity>(entity);
    vel.dx = 0.;
    vel.dy = 0.;
    // ...
    }
    }
    void update(std::uint64_t dt, entt::registry &registry) {
    registry.view<position, velocity>().each([dt](auto &pos, auto &vel) {
    // gets all the components of the view at once ...
    pos.x += vel.dx * dt;
    pos.y += vel.dy * dt;
    // ...
    });
    }
    int main() {
    entt::registry registry;
    std::uint64_t dt = 16;
    for(auto i = 0; i < 10; ++i) {
    auto entity = registry.create();
    registry.assign<position>(entity, i * 1.f, i * 1.f);
    if(i % 2 == 0) { registry.assign<velocity>(entity, i * .1f, i * .1f); }
    }
    update(dt, registry);
    update(registry);
    // ...
    }

    +
    #include <entt/entt.hpp>
    +
    #include <cstdint>
    +
    +
    struct position {
    +
    float x;
    +
    float y;
    +
    };
    +
    +
    struct velocity {
    +
    float dx;
    +
    float dy;
    +
    };
    +
    +
    void update(entt::registry &registry) {
    +
    auto view = registry.view<position, velocity>();
    +
    +
    for(auto entity: view) {
    +
    // gets only the components that are going to be used ...
    +
    +
    auto &vel = view.get<velocity>(entity);
    +
    +
    vel.dx = 0.;
    +
    vel.dy = 0.;
    +
    +
    // ...
    +
    }
    +
    }
    +
    +
    void update(std::uint64_t dt, entt::registry &registry) {
    +
    registry.view<position, velocity>().each([dt](auto &pos, auto &vel) {
    +
    // gets all the components of the view at once ...
    +
    +
    pos.x += vel.dx * dt;
    +
    pos.y += vel.dy * dt;
    +
    +
    // ...
    +
    });
    +
    }
    +
    +
    int main() {
    + +
    std::uint64_t dt = 16;
    +
    +
    for(auto i = 0; i < 10; ++i) {
    +
    auto entity = registry.create();
    +
    registry.assign<position>(entity, i * 1.f, i * 1.f);
    +
    if(i % 2 == 0) { registry.assign<velocity>(entity, i * .1f, i * .1f); }
    +
    }
    +
    +
    update(dt, registry);
    +
    update(registry);
    +
    +
    // ...
    +
    }
    +

    Motivation

    -

    I started developing EnTT for the wrong reason: my goal was to design an entity-component system to beat another well known open source solution both in terms of performance and possibly memory usage.
    +

    I started developing EnTT for the wrong reason: my goal was to design an entity-component system to beat another well known open source solution both in terms of performance and possibly memory usage.
    In the end, I did it, but it wasn't very satisfying. Actually it wasn't satisfying at all. The fastest and nothing more, fairly little indeed. When I realized it, I tried hard to keep intact the great performance of EnTT and to add all the features I wanted to see in my own library at the same time.

    Nowadays, EnTT is finally what I was looking for: still faster than its competitors, lower memory usage in the average case, a really good API and an amazing set of features. And even more, of course.

    Performance

    The proposed entity-component system is incredibly fast to iterate entities and components, this is a fact. Some compilers make a lot of optimizations because of how EnTT works, some others aren't that good. In general, if we consider real world cases, EnTT is somewhere between a bit and much faster than many of the other solutions around, although I couldn't check them all for obvious reasons.

    If you are interested, you can compile the benchmark test in release mode (to enable compiler optimizations, otherwise it would make little sense) by setting the BUILD_BENCHMARK option of CMake to ON, then evaluate yourself whether you're satisfied with the results or not.

    -

    Honestly I got tired of updating the README file whenever there is an improvement.
    +

    Honestly I got tired of updating the README file whenever there is an improvement.
    There are already a lot of projects out there that use EnTT as a basis for comparison (this should already tell you a lot). Many of these benchmarks are completely wrong, many others are simply incomplete, good at omitting some information and using the wrong function to compare a given feature. Certainly there are also good ones but they age quickly if nobody updates them, especially when the library they are dealing with is actively developed.

    The choice to use EnTT should be based on its carefully designed API, its set of features and the general performance, not because some single benchmark shows it to be the fastest tool available.

    -

    In the future I'll likely try to get even better performance while still adding new features, mainly for fun.
    +

    In the future I'll likely try to get even better performance while still adding new features, mainly for fun.
    If you want to contribute and/or have suggestions, feel free to make a PR or open an issue to discuss your idea.

    Build Instructions

    Requirements

    -

    To be able to use EnTT, users must provide a full-featured compiler that supports at least C++17.
    +

    To be able to use EnTT, users must provide a full-featured compiler that supports at least C++17.
    The requirements below are mandatory to compile the tests and to extract the documentation:

    -

    Alternatively, Bazel is also supported as a build system (credits to zaucy who introduced what's required with this pull request and offered to maintain it).
    +

    Alternatively, Bazel is also supported as a build system (credits to zaucy who introduced what's required with this pull request and offered to maintain it).
    In the documentation below I'll still refer to CMake, this being the official build system of the library.

    If you are looking for a C++14 version of EnTT, check out the git tag cpp14.

    Library

    -

    EnTT is a header-only library. This means that including the entt.hpp header is enough to include the library as a whole and use it. For those who are interested only in the entity-component system, consider to include the sole entity/registry.hpp header instead.
    +

    EnTT is a header-only library. This means that including the entt.hpp header is enough to include the library as a whole and use it. For those who are interested only in the entity-component system, consider to include the sole entity/registry.hpp header instead.
    It's a matter of adding the following line to the top of a file:

    -
    #include <entt/entt.hpp>

    Use the line below to include only the entity-component system instead:

    -
    #include <entt/entity/registry.hpp>

    Then pass the proper -I argument to the compiler to add the src directory to the include paths.

    +
    #include <entt/entt.hpp>
    +

    Use the line below to include only the entity-component system instead:

    +
    #include <entt/entity/registry.hpp>
    +

    Then pass the proper -I argument to the compiler to add the src directory to the include paths.

    Documentation

    The documentation is based on doxygen. To build it:

    $ cd build
    @@ -138,7 +195,7 @@ $ make
     $ your_favorite_browser docs/html/index.html
     

    Tests

    -

    To compile and run the tests, EnTT requires googletest.
    +

    To compile and run the tests, EnTT requires googletest.
    cmake will download and compile the library before compiling anything else. In order to build the tests, set the CMake option BUILD_TESTING to ON.

    To build the most basic set of tests:

    If you know of other resources out there that are about EnTT, feel free to open an issue or a PR and I'll be glad to add them to this page.

    + diff --git a/md_docs_md_locator.html b/md_docs_md_locator.html new file mode 100644 index 000000000..75c1d513f --- /dev/null +++ b/md_docs_md_locator.html @@ -0,0 +1,123 @@ + + + + + + + +EnTT: Crash Course: service locator + + + + + + + + + +
    +
    + + + + + + +
    +
    EnTT +  3.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    Crash Course: service locator
    +
    +
    +

    +Introduction

    +

    Usually service locators are tightly bound to the services they expose and it's hard to define a general purpose solution. This template based implementation tries to fill the gap and to get rid of the burden of defining a different specific locator for each application.
    + This class is tiny, partially unsafe and thus risky to use. Moreover it doesn't fit probably most of the scenarios in which a service locator is required. Look at it as a small tool that can sometimes be useful if users know how to handle it.

    +

    +Service locator

    +

    The API is straightforward. The basic idea is that services are implemented by means of interfaces and rely on polymorphism.
    + The locator is instantiated with the base type of the service if any and a concrete implementation is provided along with all the parameters required to initialize it. As an example:

    +
    // the service has no base type, a locator is used to treat it as a kind of singleton
    + +
    +
    // sets up an opaque service
    + +
    +
    // resets (destroys) the service
    + +

    The locator can also be queried to know if an active service is currently set and to retrieve it if necessary (either as a pointer or as a reference):

    +
    // no service currently set
    + +
    +
    // gets a (possibly empty) shared pointer to the service ...
    +
    std::shared_ptr<audio_interface> ptr = entt::service_locator<audio_interface>::get();
    +
    +
    // ... or a reference, but it's undefined behaviour if the service isn't set yet
    + +

    A common use is to wrap the different locators in a container class, creating aliases for the various services:

    +
    struct locator {
    + + +
    // ...
    +
    };
    +
    +
    // ...
    +
    +
    void init() {
    +
    locator::camera::set<camera_null>();
    +
    locator::audio::set<audio_implementation>(params...);
    +
    // ...
    +
    }
    +
    +
    +
    entt::service_locator
    Service locator, nothing more.
    Definition: locator.hpp:25
    +
    entt::service_locator::ref
    static Service & ref() ENTT_NOEXCEPT
    Returns a weak reference to a service implementation, if any.
    Definition: locator.hpp:70
    +
    entt::service_locator::reset
    static void reset()
    Resets a service.
    Definition: locator.hpp:99
    +
    entt::service_locator::get
    static std::weak_ptr< Service > get() ENTT_NOEXCEPT
    Returns a weak pointer to a service implementation, if any.
    Definition: locator.hpp:52
    +
    entt::service_locator::empty
    static bool empty() ENTT_NOEXCEPT
    Tests if a valid service implementation is set.
    Definition: locator.hpp:38
    +
    entt::service_locator::set
    static void set(Args &&... args)
    Sets or replaces a service.
    Definition: locator.hpp:81
    + + + + diff --git a/autotoc_md71.html b/md_docs_md_meta.html similarity index 60% rename from autotoc_md71.html rename to md_docs_md_meta.html index 919650dbc..11595565a 100644 --- a/autotoc_md71.html +++ b/md_docs_md_meta.html @@ -1,9 +1,9 @@ - + - + EnTT: Crash Course: runtime reflection system @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */
    -
    +
    Crash Course: runtime reflection system

    Introduction

    -

    Reflection (or rather, its lack) is a trending topic in the C++ world and, in the specific case of EnTT, a tool that can unlock a lot of other features. I looked for a third-party library that met my needs on the subject, but I always came across some details that I didn't like: macros, being intrusive, too many allocations. In one word: unsatisfactory.
    +

    Reflection (or rather, its lack) is a trending topic in the C++ world and, in the specific case of EnTT, a tool that can unlock a lot of other features. I looked for a third-party library that met my needs on the subject, but I always came across some details that I didn't like: macros, being intrusive, too many allocations. In one word: unsatisfactory.
    I finally decided to write a built-in, non-intrusive and macro-free runtime reflection system for EnTT. Maybe I didn't do better than others or maybe yes, time will tell me, but at least I can model this tool around the library to which it belongs and not vice versa.

    Names and identifiers

    -

    The meta system doesn't force the user to use the tools provided by the library when it comes to working with names and identifiers. It does this by offering an API that works with opaque identifiers that may or may not be generated by means of a hashed string.
    +

    The meta system doesn't force the user to use the tools provided by the library when it comes to working with names and identifiers. It does this by offering an API that works with opaque identifiers that may or may not be generated by means of a hashed string.
    This means that users can assign any type of identifier to the meta objects, as long as they are numeric. It doesn't matter if they are generated at runtime, at compile-time or with custom functions.

    However, the examples in the following sections are all based on the hashed_string class as provided by this library. Therefore, where an identifier is required, it's likely that a user defined literal is used as follows:

    -
    auto factory = entt::meta<my_type>().type("reflected_type"_hs);

    For what it's worth, this is likely completely equivalent to:

    -
    auto factory = entt::meta<my_type>().type(42);

    Obviously, human-readable identifiers are more convenient to use and highly recommended.

    +
    auto factory = entt::meta<my_type>().type("reflected_type"_hs);
    +

    For what it's worth, this is likely completely equivalent to:

    +
    auto factory = entt::meta<my_type>().type(42);
    +

    Obviously, human-readable identifiers are more convenient to use and highly recommended.

    Reflection in a nutshell

    -

    Reflection always starts from real types (users cannot reflect imaginary types and it would not make much sense, we wouldn't be talking about reflection anymore).
    +

    Reflection always starts from real types (users cannot reflect imaginary types and it would not make much sense, we wouldn't be talking about reflection anymore).
    To create a meta node, the library provides the meta function that accepts a type to reflect as a template parameter:

    -
    auto factory = entt::meta<my_type>();

    This isn't enough to export the given type and make it visible though.
    +

    auto factory = entt::meta<my_type>();
    +

    This isn't enough to export the given type and make it visible though.
    The returned value is a factory object to use to continue building the meta type. In order to make the type visible, users can assign it an identifier:

    -
    auto factory = entt::meta<my_type>().type("reflected_type"_hs);

    When working with named types, it isn't even necessary to specify the identifier. In fact, it isn't allowed and it will trigger a compilation error.
    +

    auto factory = entt::meta<my_type>().type("reflected_type"_hs);
    +

    When working with named types, it isn't even necessary to specify the identifier. In fact, it isn't allowed and it will trigger a compilation error.
    Identifiers are important because users can retrieve meta types at runtime by searching for them by name other than by type. On the other hand, there are cases in which users can be interested in adding features to a reflected type so that the reflection system can use it correctly under the hood, but they don't want to allow searching the type by name. In this case, it's sufficient not to invoke type and the type will not be searchable by name.

    A factory is such that all its member functions returns the factory itself or a decorated version of it. This object can be used to add the following:

      -
    • Constructors. Actual constructors can be assigned to a reflected type by specifying their list of arguments. Free functions (namely, factories) can be used as well, as long as the return type is the expected one. From a client's point of view, nothing changes if a constructor is a free function or an actual constructor.
      +
    • Constructors. Actual constructors can be assigned to a reflected type by specifying their list of arguments. Free functions (namely, factories) can be used as well, as long as the return type is the expected one. From a client's point of view, nothing changes if a constructor is a free function or an actual constructor.
      Use the ctor member function for this purpose:
    -
    entt::meta<my_type>().ctor<int, char>().ctor<&factory>();
      -
    • Destructors. Free functions can be set as destructors of reflected types. The purpose is to give users the ability to free up resources that require special treatment before an object is actually destroyed.
      +
      entt::meta<my_type>().ctor<int, char>().ctor<&factory>();
      +
        +
      • Destructors. Free functions can be set as destructors of reflected types. The purpose is to give users the ability to free up resources that require special treatment before an object is actually destroyed.
        Use the dtor member function for this purpose:
      -
      entt::meta<my_type>().dtor<&destroy>();

      A function should neither delete nor explicitly invoke the destructor of a given instance.

      +
      entt::meta<my_type>().dtor<&destroy>();
      +

      A function should neither delete nor explicitly invoke the destructor of a given instance.

        -
      • Data members. Both real data members of the underlying type and static and global variables, as well as constants of any kind, can be attached to a meta type. From a client's point of view, all the variables associated with the reflected type will appear as if they were part of the type itself.
        +
      • Data members. Both real data members of the underlying type and static and global variables, as well as constants of any kind, can be attached to a meta type. From a client's point of view, all the variables associated with the reflected type will appear as if they were part of the type itself.
        Use the data member function for this purpose:
      -
      entt::meta<my_type>()
      .data<&my_type::static_variable>("static"_hs)
      .data<&my_type::data_member>("member"_hs)
      .data<&global_variable>("global"_hs);

      This function requires as an argument the identifier to give to the meta data once created. Users can then access meta data at runtime by searching for them by name.
      - Data members can be set also by means of a couple of functions, namely a setter and a getter. Setters and getters can be either free functions, member functions or mixed ones, as long as they respect the required signatures.
      +

      entt::meta<my_type>()
      +
      .data<&my_type::static_variable>("static"_hs)
      +
      .data<&my_type::data_member>("member"_hs)
      +
      .data<&global_variable>("global"_hs);
      +

      This function requires as an argument the identifier to give to the meta data once created. Users can then access meta data at runtime by searching for them by name.
      + Data members can be set also by means of a couple of functions, namely a setter and a getter. Setters and getters can be either free functions, member functions or mixed ones, as long as they respect the required signatures.
      Refer to the inline documentation for all the details.

        -
      • Member functions. Both real member functions of the underlying type and free functions can be attached to a meta type. From a client's point of view, all the functions associated with the reflected type will appear as if they were part of the type itself.
        +
      • Member functions. Both real member functions of the underlying type and free functions can be attached to a meta type. From a client's point of view, all the functions associated with the reflected type will appear as if they were part of the type itself.
        Use the func member function for this purpose:
      -
      entt::meta<my_type>()
      .func<&my_type::static_function>("static"_hs)
      .func<&my_type::member_function>("member"_hs)
      .func<&free_function>("free"_hs);

      This function requires as an argument the identifier to give to the meta function once created. Users can then access meta functions at runtime by searching for them by name.

      +
      entt::meta<my_type>()
      +
      .func<&my_type::static_function>("static"_hs)
      +
      .func<&my_type::member_function>("member"_hs)
      +
      .func<&free_function>("free"_hs);
      +

      This function requires as an argument the identifier to give to the meta function once created. Users can then access meta functions at runtime by searching for them by name.

        -
      • Base classes. A base class is such that the underlying type is actually derived from it. In this case, the reflection system tracks the relationship and allows for implicit casts at runtime when required.
        +
      • Base classes. A base class is such that the underlying type is actually derived from it. In this case, the reflection system tracks the relationship and allows for implicit casts at runtime when required.
        Use the base member function for this purpose:
      -
      entt::meta<derived_type>().base<base_type>();

      From now on, wherever a base_type is required, an instance of derived_type will also be accepted.

      +
      entt::meta<derived_type>().base<base_type>();
      +

      From now on, wherever a base_type is required, an instance of derived_type will also be accepted.

        -
      • Conversion functions. Actual types can be converted, this is a fact. Just think of the relationship between a double and an int to see it. Similar to bases, conversion functions allow users to define conversions that will be implicitly performed by the reflection system when required.
        +
      • Conversion functions. Actual types can be converted, this is a fact. Just think of the relationship between a double and an int to see it. Similar to bases, conversion functions allow users to define conversions that will be implicitly performed by the reflection system when required.
        Use the conv member function for this purpose:
      -
      entt::meta<double>().conv<int>();

      That's all, everything users need to create meta types and enjoy the reflection system. At first glance it may not seem that much, but users usually learn to appreciate it over time.
      +

      entt::meta<double>().conv<int>();
      +

      That's all, everything users need to create meta types and enjoy the reflection system. At first glance it may not seem that much, but users usually learn to appreciate it over time.
      Also, do not forget what these few lines hide under the hood: a built-in, non-intrusive and macro-free system for reflection in C++. Features that are definitely worth the price, at least for me.

      Any as in any type

      -

      The reflection system comes with its own meta_any type. It may seem redundant since C++17 introduced std::any, but it is not.
      +

      The reflection system comes with its own meta_any type. It may seem redundant since C++17 introduced std::any, but it is not.
      In fact, the type returned by an std::any is a const reference to an std::type_info, an implementation defined class that's not something everyone wants to see in a software. Furthermore, the class std::type_info suffers from some design flaws and there is even no way to convert an std::type_info into a meta type, thus linking the two worlds.

      -

      The class meta_any offers an API similar to that of its most famous counterpart and serves the same purpose of being an opaque container for any type of value.
      +

      The class meta_any offers an API similar to that of its most famous counterpart and serves the same purpose of being an opaque container for any type of value.
      It minimizes the allocations required, which are almost absent thanks to SBO techniques. In fact, unless users deal with fat types and create instances of them through the reflection system, allocations are at zero.

      Creating instances of meta_any, whether empty or from existing objects, is trivial:

      -
      // a container for an int
      // an empty container

      The meta_any class takes also the burden of destroying the contained object when required.
      +

      // a container for an int
      + +
      +
      // an empty container
      + +

      The meta_any class takes also the burden of destroying the contained object when required.
      Furthermore, an instance of meta_any is not tied to a specific type. Therefore, the wrapper will be reconfigured by assigning it an object of a different type than the one contained, so as to be able to handle the new instance.

      A particularly interesting feature of this class is that it can also be used as an opaque container for unmanaged objects:

      -
      int value;
      entt::meta_any any{std::ref(value)};

      In other words, whenever meta_any intercepts a reference_wrapper, it acts as a reference to the original instance rather than making a copy of it. The contained object is never destroyed and users must ensure that its lifetime exceeds that of the container.

      +
      int value;
      +
      entt::meta_any any{std::ref(value)};
      +

      In other words, whenever meta_any intercepts a reference_wrapper, it acts as a reference to the original instance rather than making a copy of it. The contained object is never destroyed and users must ensure that its lifetime exceeds that of the container.

      The meta_any class has also a type member function that returns the meta type of the contained value, if any. The member functions try_cast, cast and convert are used to know if the underlying object has a given type as a base or if it can be converted implicitly to it.

      Enjoy the runtime

      -

      Once the web of reflected types has been constructed, it's a matter of using it at runtime where required.
      +

      Once the web of reflected types has been constructed, it's a matter of using it at runtime where required.
      All this has the great merit that, unlike the vast majority of the things present in this library and closely linked to the compile-time, the reflection system stands in fact as a non-intrusive tool for the runtime.

      To search for a reflected type there are two options: by type or by name. In both cases, the search can be done by means of the resolve function:

      -
      // search for a reflected type by type
      auto by_type = entt::resolve<my_type>();
      // search for a reflected type by name
      auto by_name = entt::resolve("reflected_type"_hs);

      There exits also a third overload of the resolve function to use to iterate all the reflected types at once:

      -
      resolve([](auto type) {
      // ...
      });

      In all cases, the returned value is an instance of meta_type. This kind of objects offer an API to know their runtime identifiers, to iterate all the meta objects associated with them and even to build or destroy instances of the underlying type.
      +

      // search for a reflected type by type
      +
      auto by_type = entt::resolve<my_type>();
      +
      +
      // search for a reflected type by name
      +
      auto by_name = entt::resolve("reflected_type"_hs);
      +

      There exits also a third overload of the resolve function to use to iterate all the reflected types at once:

      +
      resolve([](auto type) {
      +
      // ...
      +
      });
      +

      In all cases, the returned value is an instance of meta_type. This kind of objects offer an API to know their runtime identifiers, to iterate all the meta objects associated with them and even to build or destroy instances of the underlying type.
      Refer to the inline documentation for all the details.

      The meta objects that compose a meta type are accessed in the following ways:

      • Meta constructors. They are accessed by types of arguments:
      -
      auto ctor = entt::resolve<my_type>().ctor<int, char>();

      The returned type is meta_ctor and may be invalid if there is no constructor that accepts the supplied arguments or at least some types from which they are derived or to which they can be converted.
      +

      auto ctor = entt::resolve<my_type>().ctor<int, char>();
      +

      The returned type is meta_ctor and may be invalid if there is no constructor that accepts the supplied arguments or at least some types from which they are derived or to which they can be converted.
      A meta constructor offers an API to know the number of arguments, the expected meta types and to invoke it, therefore to construct a new instance of the underlying type.

      • Meta destructor. It's returned by a dedicated function:
      -
      auto dtor = entt::resolve<my_type>().dtor();

      The returned type is meta_dtor and may be invalid if there is no custom destructor set for the given meta type.
      +

      auto dtor = entt::resolve<my_type>().dtor();
      +

      The returned type is meta_dtor and may be invalid if there is no custom destructor set for the given meta type.
      All what a meta destructor has to offer is a way to invoke it on a given instance. Be aware that the result may not be what is expected.

      • Meta data. They are accessed by name:
      -
      auto data = entt::resolve<my_type>().data("member"_hs);

      The returned type is meta_data and may be invalid if there is no meta data object associated with the given identifier.
      +

      auto data = entt::resolve<my_type>().data("member"_hs);
      +

      The returned type is meta_data and may be invalid if there is no meta data object associated with the given identifier.
      A meta data object offers an API to query the underlying type (for example, to know if it's a const or a static one), to get the meta type of the variable and to set or get the contained value.

      • Meta functions. They are accessed by name:
      -
      auto func = entt::resolve<my_type>().func("member"_hs);

      The returned type is meta_func and may be invalid if there is no meta function object associated with the given identifier.
      +

      auto func = entt::resolve<my_type>().func("member"_hs);
      +

      The returned type is meta_func and may be invalid if there is no meta function object associated with the given identifier.
      A meta function object offers an API to query the underlying type (for example, to know if it's a const or a static function), to know the number of arguments, the meta return type and the meta types of the parameters. In addition, a meta function object can be used to invoke the underlying function and then get the return value in the form of a meta_any object.

      • Meta bases. They are accessed through the name of the base types:
      -
      auto base = entt::resolve<derived_type>().base("base"_hs);

      The returned type is meta_base and may be invalid if there is no meta base object associated with the given identifier.
      +

      auto base = entt::resolve<derived_type>().base("base"_hs);
      +

      The returned type is meta_base and may be invalid if there is no meta base object associated with the given identifier.
      Meta bases aren't meant to be used directly, even though they are freely accessible. They expose only a few methods to use to know the meta type of the base class and to convert a raw pointer between types.

      • Meta conversion functions. They are accessed by type:
      -
      auto conv = entt::resolve<double>().conv<int>();

      The returned type is meta_conv and may be invalid if there is no meta conversion function associated with the given type.
      +

      auto conv = entt::resolve<double>().conv<int>();
      +

      The returned type is meta_conv and may be invalid if there is no meta conversion function associated with the given type.
      The meta conversion functions are as thin as the meta bases and with a very similar interface. The sole difference is that they return a newly created instance wrapped in a meta_any object when they convert between different types.

      All the objects thus obtained as well as the meta types can be explicitly converted to a boolean value to check if they are valid:

      -
      if(auto func = entt::resolve<my_type>().func("member"_hs); func) {
      // ...
      }

      Furthermore, all meta objects with the exception of meta destructors can be iterated through an overload that accepts a callback through which to return them. As an example:

      -
      entt::resolve<my_type>().data([](auto data) {
      // ...
      });

      A meta type can also be used to construct or destroy actual instances of the underlying type.
      - In particular, the construct member function accepts a variable number of arguments and searches for a match. It returns a meta_any object that may or may not be initialized, depending on whether a suitable constructor has been found or not. On the other side, the destroy member function accepts instances of meta_any as well as actual objects by reference and invokes the registered destructor, if any.
      +

      if(auto func = entt::resolve<my_type>().func("member"_hs); func) {
      +
      // ...
      +
      }
      +

      Furthermore, all meta objects with the exception of meta destructors can be iterated through an overload that accepts a callback through which to return them. As an example:

      +
      entt::resolve<my_type>().data([](auto data) {
      +
      // ...
      +
      });
      +

      A meta type can also be used to construct or destroy actual instances of the underlying type.
      + In particular, the construct member function accepts a variable number of arguments and searches for a match. It returns a meta_any object that may or may not be initialized, depending on whether a suitable constructor has been found or not. On the other side, the destroy member function accepts instances of meta_any as well as actual objects by reference and invokes the registered destructor, if any.
      Be aware that the result of a call to destroy may not be what is expected. The purpose is to give users the ability to free up resources that require special treatment and not to actually destroy instances.

      -

      Meta types and meta objects in general contain much more than what is said: a plethora of functions in addition to those listed whose purposes and uses go unfortunately beyond the scope of this document.
      +

      Meta types and meta objects in general contain much more than what is said: a plethora of functions in addition to those listed whose purposes and uses go unfortunately beyond the scope of this document.
      I invite anyone interested in the subject to look at the code, experiment and read the inline documentation to get the best out of this powerful tool.

      Policies: the more, the less

      -

      Policies are a kind of compile-time directives that can be used when recording reflection information.
      +

      Policies are a kind of compile-time directives that can be used when recording reflection information.
      Their purpose is to require slightly different behavior than the default in some specific cases. For example, when reading a given data member, its value is returned wrapped in a meta_any object which, by default, makes a copy of it. For large objects or if the caller wants to access the original instance, this behavior isn't desirable. Policies are there to offer a solution to this and other problems.

      There are a few alternatives available at the moment:

        -
      • The as-is policy, associated with the type entt::as_is_t.
        - This is the default policy. In general, it should never be used explicitly, since it's implicitly selected if no other policy is specified.
        +
      • The as-is policy, associated with the type entt::as_is_t.
        + This is the default policy. In general, it should never be used explicitly, since it's implicitly selected if no other policy is specified.
        In this case, the return values of the functions as well as the properties exposed as data members are always returned by copy in a dedicated wrapper and therefore associated with their original meta types.
      • -
      • The as-void policy, associated with the type entt::as_void_t.
        - Its purpose is to discard the return value of a meta object, whatever it is, thus making it appear as if its type were void.
        +

      • The as-void policy, associated with the type entt::as_void_t.
        + Its purpose is to discard the return value of a meta object, whatever it is, thus making it appear as if its type were void.
        If the use with functions is obvious, it must be said that it's also possible to use this policy with constructors and data members. In the first case, the constructor will be invoked but the returned wrapper will actually be empty. In the second case, instead, the property will not be accessible for reading.

        As an example of use:

      -
      entt::meta<my_type>().func<&my_type::member_function, entt::as_void_t>("member"_hs);
        -
      • The as-alias policy, associated with the type entt::as_alias_t.
        - It allows to build wrappers that act as aliases for the objects used to initialize them. Modifying the object contained in the wrapper for which the aliasing was requested will make it possible to directly modify the instance used to initialize the wrapper itself.
        +

        entt::meta<my_type>().func<&my_type::member_function, entt::as_void_t>("member"_hs);
        +
          +
        • The as-alias policy, associated with the type entt::as_alias_t.
          + It allows to build wrappers that act as aliases for the objects used to initialize them. Modifying the object contained in the wrapper for which the aliasing was requested will make it possible to directly modify the instance used to initialize the wrapper itself.
          This policy works with constructors (for example, when objects are taken from an external container rather than created on demand), data members and functions in general (as long as their return types are lvalue references).

          As an example of use:

        -
        entt::meta<my_type>().data<&my_type::data_member, entt::as_alias_t>("member"_hs);

        Some uses are rather trivial, but it's useful to note that there are some less obvious corner cases that can in turn be solved with the use of policies.

        +
        entt::meta<my_type>().data<&my_type::data_member, entt::as_alias_t>("member"_hs);
        +

        Some uses are rather trivial, but it's useful to note that there are some less obvious corner cases that can in turn be solved with the use of policies.

        Named constants and enums

        A special mention should be made for constant values and enums. It wouldn't be necessary, but it will help distracted readers.

        -

        As mentioned, the data member function can be used to reflect constants of any type among the other things.
        - This allows users to create meta types for enums that will work exactly like any other meta type built from a class. Similarly, arithmetic types can be enriched with constants of special meaning where required.
        +

        As mentioned, the data member function can be used to reflect constants of any type among the other things.
        + This allows users to create meta types for enums that will work exactly like any other meta type built from a class. Similarly, arithmetic types can be enriched with constants of special meaning where required.
        Personally, I find it very useful not to export what is the difference between enums and classes in C++ directly in the space of the reflected types.

        All the values thus exported will appear to users as if they were constant data members of the reflected types.

        Exporting constant values or elements from an enum is as simple as ever:

        -
        entt::meta<my_enum>()
        .data<my_enum::a_value>("a_value"_hs)
        .data<my_enum::another_value>("another_value"_hs);
        entt::meta<int>().data<2048>("max_int"_hs);

        It goes without saying that accessing them is trivial as well. It's a matter of doing the following, as with any other data member of a meta type:

        -
        auto value = entt::resolve<my_enum>().data("a_value"_hs).get({}).cast<my_enum>();
        auto max = entt::resolve<int>().data("max_int"_hs).get({}).cast<int>();

        As a side note, remember that all this happens behind the scenes without any allocation because of the small object optimization performed by the meta_any class.

        +
        entt::meta<my_enum>()
        +
        .data<my_enum::a_value>("a_value"_hs)
        +
        .data<my_enum::another_value>("another_value"_hs);
        +
        +
        entt::meta<int>().data<2048>("max_int"_hs);
        +

        It goes without saying that accessing them is trivial as well. It's a matter of doing the following, as with any other data member of a meta type:

        +
        auto value = entt::resolve<my_enum>().data("a_value"_hs).get({}).cast<my_enum>();
        +
        auto max = entt::resolve<int>().data("max_int"_hs).get({}).cast<int>();
        +

        As a side note, remember that all this happens behind the scenes without any allocation because of the small object optimization performed by the meta_any class.

        Properties and meta objects

        -

        Sometimes (for example, when it comes to creating an editor) it might be useful to attach properties to the meta objects created. Fortunately, this is possible for most of them.
        - For the meta objects that support properties, the member functions of the factory used for registering them will return a decorated version of the factory itself. The latter can be used to attach properties to the last created meta object.
        +

        Sometimes (for example, when it comes to creating an editor) it might be useful to attach properties to the meta objects created. Fortunately, this is possible for most of them.
        + For the meta objects that support properties, the member functions of the factory used for registering them will return a decorated version of the factory itself. The latter can be used to attach properties to the last created meta object.
        Apparently, it's more difficult to say than to do:

        -
        entt::meta<my_type>().type("reflected_type"_hs).prop("tooltip"_hs, "message");

        Properties are always in the key/value form. There are no restrictions on the type of the key or value, as long as they are copy constructible objects.
        +

        entt::meta<my_type>().type("reflected_type"_hs).prop("tooltip"_hs, "message");
        +

        Properties are always in the key/value form. There are no restrictions on the type of the key or value, as long as they are copy constructible objects.
        Multiple formats are supported when it comes to defining a property:

        • Properties as key/value pairs:
        -
        entt::meta<my_type>().type("reflected_type"_hs).prop("tooltip"_hs, "message");
          +
          entt::meta<my_type>().type("reflected_type"_hs).prop("tooltip"_hs, "message");
          +
          • Properties as std::pairs:
          -
          entt::meta<my_type>().type("reflected_type"_hs).prop(std::make_pair("tooltip"_hs, "message"));
            +
            entt::meta<my_type>().type("reflected_type"_hs).prop(std::make_pair("tooltip"_hs, "message"));
            +
            • Key only properties:
            -
            entt::meta<my_type>().type("reflected_type"_hs).prop(my_enum::key_only);
              +
              entt::meta<my_type>().type("reflected_type"_hs).prop(my_enum::key_only);
              +
              • Properties as std::tuples:
              -
              entt::meta<my_type>().type("reflected_type"_hs)
              .prop(std::make_tuple(std::make_pair("tooltip"_hs, "message"), my_enum::key_only));

              A tuple contains one or more properties. All of them are treated individually.

              +
              entt::meta<my_type>().type("reflected_type"_hs)
              +
              .prop(std::make_tuple(std::make_pair("tooltip"_hs, "message"), my_enum::key_only));
              +

              A tuple contains one or more properties. All of them are treated individually.

              • Annotations:
              -
              entt::meta<my_type>().type("reflected_type"_hs).prop(&property_generator);

              An annotation is an invocable object that returns one or more properties. All of them are treated individually.

              +
              entt::meta<my_type>().type("reflected_type"_hs).prop(&property_generator);
              +

              An annotation is an invocable object that returns one or more properties. All of them are treated individually.

              It's possible to invoke the prop function several times if needed, one for each property to associate with the last meta object created:

              -
              entt::meta<my_type>()
              .type("reflected_type"_hs)
              .prop(entt::hashed_string{"Name"}, "Reflected Type")
              .data<&my_type::data_member>("member"_hs)
              .prop(std::make_pair("tooltip"_hs, "Member"))
              .prop(my_enum::a_value, 42);

              Alternatively, the props function is available to associate several properties at a time. However, in this case properties in the key/value form aren't allowed, since they would be interpreted as two different properties rather than a single one.

              +
              entt::meta<my_type>()
              +
              .type("reflected_type"_hs)
              +
              .prop(entt::hashed_string{"Name"}, "Reflected Type")
              +
              .data<&my_type::data_member>("member"_hs)
              +
              .prop(std::make_pair("tooltip"_hs, "Member"))
              +
              .prop(my_enum::a_value, 42);
              +

              Alternatively, the props function is available to associate several properties at a time. However, in this case properties in the key/value form aren't allowed, since they would be interpreted as two different properties rather than a single one.

              The meta objects for which properties are supported are currently the meta types, meta constructors, meta data and meta functions. It's not possible to attach properties to other types of meta objects and the factory returned as a result of their construction won't allow such an operation.

              These types offer a couple of member functions named prop to iterate all properties at once or to search a specific property by key:

              -
              // iterate all properties of a meta type
              entt::resolve<my_type>().prop([](auto prop) {
              // ...
              });
              // search for a given property by name
              auto prop = entt::resolve<my_type>().prop("tooltip"_hs);

              Meta properties are objects having a fairly poor interface, all in all. They only provide the key and the value member functions to be used to retrieve the key and the value contained in the form of meta_any objects, respectively.

              +
              // iterate all properties of a meta type
              +
              entt::resolve<my_type>().prop([](auto prop) {
              +
              // ...
              +
              });
              +
              +
              // search for a given property by name
              +
              auto prop = entt::resolve<my_type>().prop("tooltip"_hs);
              +

              Meta properties are objects having a fairly poor interface, all in all. They only provide the key and the value member functions to be used to retrieve the key and the value contained in the form of meta_any objects, respectively.

              Unregister types

              -

              A type registered with the reflection system can also be unregistered. This means unregistering all its data members, member functions, conversion functions and so on. However, the base classes won't be unregistered, since they don't necessarily depend on it. Similarly, implicitly generated types (as an example, the meta types implicitly generated for function parameters when needed) won't be unregistered.
              +

              A type registered with the reflection system can also be unregistered. This means unregistering all its data members, member functions, conversion functions and so on. However, the base classes won't be unregistered, since they don't necessarily depend on it. Similarly, implicitly generated types (as an example, the meta types implicitly generated for function parameters when needed) won't be unregistered.
              Roughly speaking, unregistering a type means disconnecting all associated meta objects from it and making its identifier no longer visible. The underlying node will remain available though, as if it were implicitly generated:

              -
              entt::meta<my_type>().reset();

              The type can be re-registered later with a completely different name and form.

              +
              entt::meta<my_type>().reset();
              +

              The type can be re-registered later with a completely different name and form.

    +
    +
    Opaque container for values of any type.
    Definition: meta.hpp:311
    +
    Empty class type used to request the as void policy.
    Definition: policy.hpp:21
    +
    meta_type resolve() ENTT_NOEXCEPT
    Returns the meta type associated with a given type.
    Definition: factory.hpp:826
    +
    Zero overhead unique identifier.
    +
    Empty class type used to request the as alias policy.
    Definition: policy.hpp:9
    diff --git a/autotoc_md81.html b/md_docs_md_process.html similarity index 51% rename from autotoc_md81.html rename to md_docs_md_process.html index 13eb3e092..31688d01c 100644 --- a/autotoc_md81.html +++ b/md_docs_md_process.html @@ -1,9 +1,9 @@ - + - + EnTT: Crash Course: cooperative scheduler @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    -
    +
    Crash Course: cooperative scheduler
    @@ -90,12 +93,29 @@ The process

    Derived classes can also change the internal state of a process by invoking succeed and fail, as well as pause and unpause the process itself. All these are protected member functions made available to be able to manage the life cycle of a process from a derived class.

    Here is a minimal example for the sake of curiosity:

    -
    struct my_process: entt::process<my_process, std::uint32_t> {
    using delta_type = std::uint32_t;
    void update(delta_type delta, void *) {
    remaining -= std::min(remaining, delta);
    // ...
    if(!remaining) {
    }
    }
    private:
    delta_type remaining{1000u};
    };

    +
    struct my_process: entt::process<my_process, std::uint32_t> {
    +
    using delta_type = std::uint32_t;
    +
    +
    void update(delta_type delta, void *) {
    +
    remaining -= std::min(remaining, delta);
    +
    +
    // ...
    +
    +
    if(!remaining) {
    + +
    }
    +
    }
    +
    +
    private:
    +
    delta_type remaining{1000u};
    +
    };
    +

    Adaptor

    -

    Lambdas and functors can't be used directly with a scheduler for they are not properly defined processes with managed life cycles.
    +

    Lambdas and functors can't be used directly with a scheduler for they are not properly defined processes with managed life cycles.
    This class helps in filling the gap and turning lambdas and functors into full featured processes usable by a scheduler.

    The function call operator has a signature similar to the one of the update function of a process but for the fact that it receives two extra arguments to call whenever a process is terminated with success or with an error:

    -
    void(Delta delta, void *data, auto succeed, auto fail);

    Parameters have the following meaning:

    +
    void(Delta delta, void *data, auto succeed, auto fail);
    +

    Parameters have the following meaning:

    +
    // schedules a task in the form of a lambda function
    +
    scheduler.attach([](auto delta, void *, auto succeed, auto fail) {
    +
    // ...
    +
    })
    +
    // appends a child in the form of another lambda function
    +
    .then([](auto delta, void *, auto succeed, auto fail) {
    +
    // ...
    +
    })
    +
    // appends a child in the form of a process class
    +
    .then<my_process>();
    +

    To update a scheduler and therefore all its processes, the update member function is the way to go:

    +
    // updates all the processes, no user data are provided
    +
    scheduler.update(delta);
    +
    +
    // updates all the processes and provides them with custom data
    +
    scheduler.update(delta, &data);
    +

    In addition to these functions, the scheduler offers an abort member function that can be used to discard all the running processes at once:

    +
    // aborts all the processes abruptly ...
    +
    scheduler.abort(true);
    +
    +
    // ... or gracefully during the next tick
    +
    scheduler.abort();
    +
    + +
    entt::scheduler::clear
    void clear()
    Discards all scheduled processes.
    Definition: scheduler.hpp:147
    +
    entt::scheduler
    Cooperative scheduler for processes.
    Definition: scheduler.hpp:44
    +
    entt::process
    Base class for processes.
    Definition: process.hpp:73
    +
    entt::scheduler::size_type
    std::size_t size_type
    Unsigned integer type.
    Definition: scheduler.hpp:114
    +
    entt::scheduler::empty
    bool empty() const ENTT_NOEXCEPT
    Returns true if at least a process is currently scheduled.
    Definition: scheduler.hpp:137
    +
    entt::scheduler::attach
    auto attach(Args &&... args)
    Schedules a process for the next tick.
    Definition: scheduler.hpp:177
    +
    entt::scheduler::size
    size_type size() const ENTT_NOEXCEPT
    Number of processes currently scheduled.
    Definition: scheduler.hpp:129
    +
    entt::process::succeed
    void succeed() ENTT_NOEXCEPT
    Terminates a process with success if it's still alive.
    Definition: process.hpp:127
    diff --git a/md_docs_md_resource.html b/md_docs_md_resource.html new file mode 100644 index 000000000..9cabbcb3f --- /dev/null +++ b/md_docs_md_resource.html @@ -0,0 +1,182 @@ + + + + + + + +EnTT: Crash Course: resource management + + + + + + + + + +
    +
    + + + + + + +
    +
    EnTT +  3.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    Crash Course: resource management
    +
    +
    +

    +Introduction

    +

    Resource management is usually one of the most critical part of a software like a game. Solutions are often tuned to the particular application. There exist several approaches and all of them are perfectly fine as long as they fit the requirements of the piece of software in which they are used.
    + Examples are loading everything on start, loading on request, predictive loading, and so on.

    +

    EnTT doesn't pretend to offer a one-fits-all solution for the different cases. Instead, it offers a minimal and perhaps trivial cache that can be useful most of the time during prototyping and sometimes even in a production environment.
    + For those interested in the subject, the plan is to improve it considerably over time in terms of performance, memory usage and functionalities. Hoping to make it, of course, one step at a time.

    +

    +The resource, the loader and the cache

    +

    There are three main actors in the model: the resource, the loader and the cache.

    +

    The resource is whatever users want it to be. An image, a video, an audio, whatever. There are no limits.
    + As a minimal example:

    +
    struct my_resource { const int value; };
    +

    A loader is a class the aim of which is to load a specific resource. It has to inherit directly from the dedicated base class as in the following example:

    +
    struct my_loader final: entt::loader<my_loader, my_resource> {
    +
    // ...
    +
    };
    +

    Where my_resource is the type of resources it creates.
    + A resource loader must also expose a public const member function named load that accepts a variable number of arguments and returns a shared pointer to a resource.
    + As an example:

    +
    struct my_loader: entt::loader<my_loader, my_resource> {
    +
    std::shared_ptr<my_resource> load(int value) const {
    +
    // ...
    +
    return std::shared_ptr<my_resource>(new my_resource{ value });
    +
    }
    +
    };
    +

    In general, resource loaders should not have a state or retain data of any type. They should let the cache manage their resources instead.
    + As a side note, base class and CRTP idiom aren't strictly required with the current implementation. One could argue that a cache can easily work with loaders of any type. However, future changes won't be breaking ones by forcing the use of a base class today and that's why the model is already in its place.

    +

    Finally, a cache is a specialization of a class template tailored to a specific resource:

    +
    using my_cache = entt::cache<my_resource>;
    +
    +
    // ...
    +
    +
    my_cache cache{};
    +

    The idea is to create different caches for different types of resources and to manage each one independently in the most appropriate way.
    + As a (very) trivial example, audio tracks can survive in most of the scenes of an application while meshes can be associated with a single scene and then discarded when users leave it.

    +

    A cache offers a set of basic functionalities to query its internal state and to organize it:

    +
    // gets the number of resources managed by a cache
    +
    const auto size = cache.size();
    +
    +
    // checks if a cache contains at least a valid resource
    +
    const auto empty = cache.empty();
    +
    +
    // clears a cache and discards its content
    +
    cache.clear();
    +

    Besides these member functions, a cache contains what is needed to load, use and discard resources of the given type.
    + Before to explore this part of the interface, it makes sense to mention how resources are identified. The type of the identifiers to use is defined as:

    +

    Where id_type is an alias for entt::hashed_string::hash_type. Therefore, resource identifiers are created explicitly as in the following example:

    +
    constexpr auto identifier = entt::cache<resource>::id_type{"my/resource/identifier"_hs};
    +
    // this is equivalent to the following
    +
    constexpr auto hs = entt::hashed_string{"my/resource/identifier"};
    +

    The class hashed_string is described in a dedicated section, so I won't go in details here.

    +

    Resources are loaded and thus stored in a cache through the load member function. It accepts the loader to use as a template parameter, the resource identifier and the parameters used to construct the resource as arguments:

    +
    // uses the identifier declared above
    +
    cache.load<my_loader>(identifier, 0);
    +
    +
    // uses a const char * directly as an identifier
    +
    cache.load<my_loader>("another/identifier"_hs, 42);
    +

    The function returns a handle to the resource, whether it already exists or is loaded. In case the loader returns an invalid pointer, the handle is invalid as well and therefore it can be easily used with an if statement:

    +
    if(auto handle = cache.load<my_loader>("another/identifier"_hs, 42); handle) {
    +
    // ...
    +
    }
    +

    Before trying to load a resource, the contains member function can be used to know if a cache already contains a specific resource:

    +
    auto exists = cache.contains("my/identifier"_hs);
    +

    There exists also a member function to use to force a reload of an already existing resource if needed:

    +
    auto handle = cache.reload<my_loader>("another/identifier"_hs, 42);
    +

    As above, the function returns a handle to the resource that is invalid in case of errors. The reload member function is a kind of alias of the following snippet:

    +
    cache.discard(identifier);
    +
    cache.load<my_loader>(identifier, 42);
    +

    Where the discard member function is used to get rid of a resource if loaded. In case the cache doesn't contain a resource for the given identifier, discard does nothing and returns immediately.

    +

    So far, so good. Resources are finally loaded and stored within the cache.
    + They are returned to users in the form of handles. To get one of them later on:

    +
    auto handle = cache.handle("my/identifier"_hs);
    +

    The idea behind a handle is the same of the flyweight pattern. In other terms, resources aren't copied around. Instead, instances are shared between handles. Users of a resource own a handle that guarantees that a resource isn't destroyed until all the handles are destroyed, even if the resource itself is removed from the cache.
    + Handles are tiny objects both movable and copyable. They return the contained resource as a const reference on request:

    +
      +
    • By means of the get member function:
    • +
    +
    const auto &resource = handle.get();
    +
      +
    • Using the proper cast operator:
    • +
    +
    const auto &resource = handle;
    +
      +
    • Through the dereference operator:
    • +
    +
    const auto &resource = *handle;
    +

    The resource can also be accessed directly using the arrow operator if required:

    +
    auto value = handle->value;
    +

    To test if a handle is still valid, the cast operator to bool allows users to use it in a guard:

    +
    if(handle) {
    +
    // ...
    +
    }
    +

    Finally, in case there is the need to load a resource and thus to get a handle without storing the resource itself in the cache, users can rely on the temp member function template.
    + The declaration is similar to that of load, a (possibly invalid) handle for the resource is returned also in this case:

    +
    if(auto handle = cache.temp<my_loader>(42); handle) {
    +
    // ...
    +
    }
    +

    Do not forget to test the handle for validity. Otherwise, getting a reference to the resource it points may result in undefined behavior.

    +
    +
    +
    entt::cache
    Simple cache for resources of a given type.
    Definition: cache.hpp:29
    +
    entt::basic_hashed_string
    Zero overhead unique identifier.
    Definition: hashed_string.hpp:60
    +
    entt::loader
    Base class for resource loaders.
    Definition: fwd.hpp:18
    +
    entt::cache::id_type
    ENTT_ID_TYPE id_type
    Unique identifier type for resources.
    Definition: cache.hpp:35
    +
    entt::scheduler::size
    size_type size() const ENTT_NOEXCEPT
    Number of processes currently scheduled.
    Definition: scheduler.hpp:129
    + + + + diff --git a/md_docs_md_signal.html b/md_docs_md_signal.html new file mode 100644 index 000000000..5ee68d4ab --- /dev/null +++ b/md_docs_md_signal.html @@ -0,0 +1,309 @@ + + + + + + + +EnTT: Crash Course: events, signals and everything in between + + + + + + + + + +
    +
    + + + + + + +
    +
    EnTT +  3.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    Crash Course: events, signals and everything in between
    +
    +
    +

    +Introduction

    +

    Signals are usually a core part of games and software architectures in general.
    + Roughly speaking, they help to decouple the various parts of a system while allowing them to communicate with each other somehow.

    +

    The so called modern C++ comes with a tool that can be useful in these terms, the std::function. As an example, it can be used to create delegates.
    + However, there is no guarantee that an std::function does not perform allocations under the hood and this could be problematic sometimes. Furthermore, it solves a problem but may not adapt well to other requirements that may arise from time to time.

    +

    In case that the flexibility and power of an std::function isn't required or if the price to pay for them is too high,EnTT offers a complete set of lightweight classes to solve the same and many other problems.

    +

    +Delegate

    +

    A delegate can be used as a general purpose invoker with no memory overhead for free functions and members provided along with an instance on which to invoke them.
    + It does not claim to be a drop-in replacement for an std::function, so do not expect to use it whenever an std::function fits well. That said, it's most likely even a better fit than an std::function in a lot of cases, so expect to use it quite a lot anyway.

    +

    The interface is trivial. It offers a default constructor to create empty delegates:

    +
    +

    All what is needed to create an instance is to specify the type of the function the delegate will contain, that is the signature of the free function or the member one wants to assign to it.

    +

    Attempting to use an empty delegate by invoking its function call operator results in undefined behavior or most likely a crash. Before to use a delegate, it must be initialized.
    + There exists a bunch of overloads of the connect member function to do that. As an example of use:

    +
    int f(int i) { return i; }
    +
    +
    struct my_struct {
    +
    int f(const int &i) { return i }
    +
    };
    +
    +
    // bind a free function to the delegate
    +
    delegate.connect<&f>();
    +
    +
    // bind a member function to the delegate
    +
    my_struct instance;
    +
    delegate.connect<&my_struct::f>(instance);
    +

    The delegate class accepts also data members, if needed. In this case, the function type of the delegate is such that the parameter list is empty and the value of the data member is at least convertible to the return type.

    +

    Free functions having type equivalent to void(T &, args...) are accepted as well. In this case, T & is considered a payload and the function will receive it back every time it's invoked. In other terms, this works just fine with the above definition:

    +
    void g(const char &c, int i) { /* ... */ }
    +
    const char c = 'c';
    +
    +
    delegate.connect<&g>(c);
    + +

    The function g will be invoked with a reference to c and 42. However, the function type of the delegate is still void(int). This is also the signature of its function call operator.

    +

    Another interesting aspect of the delegate class is that it accepts also functions with a list of parameters that is shorter than that of the function type used to specialize the delegate itself.
    + The following code is therefore perfectly valid:

    +
    void g() { /* ... */ }
    +
    delegate.connect<&g>();
    + +

    Where the function type of the delegate is void(int) as above. It goes without saying that the extra arguments are silently discarded internally.
    +v This is a nice-to-have feature in a lot of cases, as an example when the delegate class is used as a building block of a signal-slot system.

    +

    To create and initialize a delegate at once, there are a few specialized constructors. Because of the rules of the language, the listener is provided by means of the entt::connect_arg variable template:

    +
    entt::delegate<int(int)> func{entt::connect_arg<&f>};
    +

    Aside connect, a disconnect counterpart isn't provided. Instead, there exists a reset member function to use to clear a delegate.
    + To know if a delegate is empty, it can be used explicitly in every conditional statement:

    +
    if(delegate) {
    +
    // ...
    +
    }
    +

    Finally, to invoke a delegate, the function call operator is the way to go as already shown in the examples above:

    +
    auto ret = delegate(42);
    +

    In all cases, the listeners don't have to strictly follow the signature of the delegate. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given result type, everything works just fine.

    +

    +Signals

    +

    Signal handlers work with references to classes, function pointers and pointers to members. Listeners can be any kind of objects and users are in charge of connecting and disconnecting them from a signal to avoid crashes due to different lifetimes. On the other side, performance shouldn't be affected that much by the presence of such a signal handler.
    + Signals make use of delegates internally and therefore they undergo the same rules and offer similar functionalities. It may be a good idea to consult the documentation of the delegate class for further information.

    +

    A signal handler can be used as a private data member without exposing any publish functionality to the clients of a class. The basic idea is to impose a clear separation between the signal itself and the sink class, that is a tool to be used to connect and disconnect listeners on the fly.

    +

    The API of a signal handler is straightforward. If a collector is supplied to the signal when something is published, all the values returned by the listeners can be literally collected and used later by the caller. Otherwise, the class works just like a plain signal that emits events from time to time.
    + To create instances of signal handlers it is sufficient to provide the type of function to which they refer:

    +
    entt::sigh<void(int, char)> signal;
    +

    Signals offer all the basic functionalities required to know how many listeners they contain (size) or if they contain at least a listener (empty), as well as a function to use to swap handlers (swap).

    +

    Besides them, there are member functions to use both to connect and disconnect listeners in all their forms by means of a sink:

    +
    void foo(int, char) { /* ... */ }
    +
    +
    struct listener {
    +
    void bar(const int &, char) { /* ... */ }
    +
    };
    +
    +
    // ...
    +
    +
    entt::sink sink{signal};
    +
    listener instance;
    +
    +
    sink.connect<&foo>();
    +
    sink.connect<&listener::bar>(instance);
    +
    +
    // ...
    +
    +
    // disconnects a free function
    +
    sink.disconnect<&foo>();
    +
    +
    // disconnect a member function of an instance
    +
    sink.disconnect<&listener::bar>(instance);
    +
    +
    // disconnect all the member functions of an instance, if any
    +
    sink.disconnect(instance);
    +
    +
    // discards all the listeners at once
    +
    sink.disconnect();
    +

    As shown above, the listeners don't have to strictly follow the signature of the signal. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given return type, everything works just fine.
    + It's also possible to connect a listener before other listeners already contained by the signal. The before function returns a sink object correctly initialized for the purpose that can be used to connect one or more listeners in order and in the desired position:

    +
    sink.before<&foo>().connect<&listener::bar>(instance);
    +

    In all cases, the connect member function returns by default a connection object to be used as an alternative to break a connection by means of its release member function. A scoped_connection can also be created from a connection. In this case, the link is broken automatically as soon as the object goes out of scope.

    +

    Once listeners are attached (or even if there are no listeners at all), events and data in general can be published through a signal by means of the publish member function:

    +
    signal.publish(42, 'c');
    +

    To collect data, the collect member function should be used instead. Below is a minimal example to show how to use it:

    +
    int f() { return 0; }
    +
    int g() { return 1; }
    +
    +
    // ...
    +
    +
    entt::sigh<int()> signal;
    +
    entt::sink sink{signal};
    +
    +
    sink.connect<&f>();
    +
    sink.connect<&g>();
    +
    +
    std::vector<int> vec{};
    +
    signal.collect([&vec](int value) { vec.push_back(value); });
    +
    +
    assert(vec[0] == 0);
    +
    assert(vec[1] == 1);
    +

    A collector must expose a function operator that accepts as an argument a type to which the return type of the listeners can be converted. Moreover, it can optionally return a boolean value that is true to stop collecting data, false otherwise. This way one can avoid calling all the listeners in case it isn't necessary.
    + Functors can also be used in place of a lambda. Since the collector is copied when invoking the collect member function, std::ref is the way to go in this case:

    +
    struct my_collector {
    +
    std::vector<int> vec{};
    +
    +
    bool operator()(int v) noexcept {
    +
    vec.push_back(v);
    +
    return true;
    +
    }
    +
    };
    +
    +
    // ...
    +
    +
    my_collector collector;
    +
    signal.collect(std::ref(collector));
    +

    +Event dispatcher

    +

    The event dispatcher class is designed so as to be used in a loop. It allows users both to trigger immediate events or to queue events to be published all together once per tick.
    + This class shares part of its API with the one of the signal handler, but it doesn't require that all the types of events are specified when declared:

    +
    // define a general purpose dispatcher
    +
    entt::dispatcher dispatcher{};
    +

    In order to register an instance of a class to a dispatcher, its type must expose one or more member functions the arguments of which are such that const E & can be converted to them for each type of event E, no matter what the return value is.
    + The name of the member function aimed to receive the event must be provided to the connect member function of the sink in charge for the specific event:

    +
    struct an_event { int value; };
    +
    struct another_event {};
    +
    +
    struct listener {
    +
    void receive(const an_event &) { /* ... */ }
    +
    void method(const another_event &) { /* ... */ }
    +
    };
    +
    +
    // ...
    +
    +
    listener listener;
    +
    dispatcher.sink<an_event>().connect<&listener::receive>(listener);
    +
    dispatcher.sink<another_event>().connect<&listener::method>(listener);
    +

    The disconnect member function follows the same pattern and can be used to remove one listener at a time or all of them at once:

    +
    dispatcher.sink<an_event>().disconnect<&listener::receive>(listener);
    +
    dispatcher.sink<another_event>().disconnect(listener);
    +

    The trigger member function serves the purpose of sending an immediate event to all the listeners registered so far. It offers a convenient approach that relieves users from having to create the event itself. Instead, it's enough to specify the type of event and provide all the parameters required to construct it.
    + As an example:

    +
    dispatcher.trigger<an_event>(42);
    +
    dispatcher.trigger<another_event>();
    +

    Listeners are invoked immediately, order of execution isn't guaranteed. This method can be used to push around urgent messages like an is terminating notification on a mobile app.

    +

    On the other hand, the enqueue member function queues messages together and allows to maintain control over the moment they are sent to listeners. The signature of this method is more or less the same of trigger:

    +
    dispatcher.enqueue<an_event>(42);
    +
    dispatcher.enqueue<another_event>();
    +

    Events are stored aside until the update member function is invoked, then all the messages that are still pending are sent to the listeners at once:

    +
    // emits all the events of the given type at once
    +
    dispatcher.update<my_event>();
    +
    +
    // emits all the events queued so far at once
    +
    dispatcher.update();
    +

    This way users can embed the dispatcher in a loop and literally dispatch events once per tick to their systems.

    +

    +Event emitter

    +

    A general purpose event emitter thought mainly for those cases where it comes to working with asynchronous stuff.
    + Originally designed to fit the requirements of uvw (a wrapper for libuv written in modern C++), it was adapted later to be included in this library.

    +

    To create a custom emitter type, derived classes must inherit directly from the base class as:

    +
    struct my_emitter: emitter<my_emitter> {
    +
    // ...
    +
    }
    +

    The full list of accepted types of events isn't required. Handlers are created internally on the fly and thus each type of event is accepted by default.

    +

    Whenever an event is published, an emitter provides the listeners with a reference to itself along with a const reference to the event. Therefore listeners have an handy way to work with it without incurring in the need of capturing a reference to the emitter itself.
    + In addition, an opaque object is returned each time a connection is established between an emitter and a listener, allowing the caller to disconnect them at a later time.
    + The opaque object used to handle connections is both movable and copyable. On the other side, an event emitter is movable but not copyable by default.

    +

    To create new instances of an emitter, no arguments are required:

    +
    my_emitter emitter{};
    +

    Listeners must be movable and callable objects (free functions, lambdas, functors, std::functions, whatever) whose function type is:

    +
    void(const Event &, my_emitter &)
    +

    Where Event is the type of event they want to listen.
    + There are two ways to attach a listener to an event emitter that differ slightly from each other:

    +
      +
    • To register a long-lived listener, use the on member function. It is meant to register a listener designed to be invoked more than once for the given event type.
      + As an example:
    • +
    +
    auto conn = emitter.on<my_event>([](const my_event &event, my_emitter &emitter) {
    +
    // ...
    +
    });
    +

    The connection object can be freely discarded. Otherwise, it can be used later to disconnect the listener if required.

    +
      +
    • To register a short-lived listener, use the once member function. It is meant to register a listener designed to be invoked only once for the given event type. The listener is automatically disconnected after the first invocation.
      + As an example:
    • +
    +
    auto conn = emitter.once<my_event>([](const my_event &event, my_emitter &emitter) {
    +
    // ...
    +
    });
    +

    The connection object can be freely discarded. Otherwise, it can be used later to disconnect the listener if required.

    +

    In both cases, the connection object can be used with the erase member function:

    +
    emitter.erase(conn);
    +

    There are also two member functions to use either to disconnect all the listeners for a given type of event or to clear the emitter:

    +
    // removes all the listener for the specific event
    +
    emitter.clear<my_event>();
    +
    +
    // removes all the listeners registered so far
    +
    emitter.clear();
    +

    To send an event to all the listeners that are interested in it, the publish member function offers a convenient approach that relieves users from having to create the event:

    +
    struct my_event { int i; };
    +
    +
    // ...
    +
    +
    emitter.publish<my_event>(42);
    +

    Finally, the empty member function tests if there exists at least either a listener registered with the event emitter or to a given type of event:

    +
    bool empty;
    +
    +
    // checks if there is any listener registered for the specific event
    +
    empty = emitter.empty<my_event>();
    +
    +
    // checks it there are listeners registered with the event emitter
    +
    empty = emitter.empty();
    +

    In general, the event emitter is a handy tool when the derived classes wrap asynchronous operations, because it introduces a nice-to-have model based on events and listeners that kindly hides the complexity behind the scenes. However it is not limited to such uses.

    +
    +
    +
    entt::sigh
    Unmanaged signal handler.
    Definition: fwd.hpp:18
    +
    entt::delegate
    delegate(connect_arg_t< Function >) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>
    Deduction guide.
    +
    entt::sink
    sink(sigh< Ret(Args...)> &) ENTT_NOEXCEPT -> sink< Ret(Args...)>
    Deduction guide.
    +
    entt::collector
    constexpr basic_collector collector
    Variable template used to ease the definition of collectors.
    Definition: observer.hpp:118
    +
    entt::dispatcher
    Basic dispatcher implementation.
    Definition: dispatcher.hpp:33
    +
    entt::sink
    Sink class.
    Definition: fwd.hpp:14
    +
    entt::delegate
    Basic delegate implementation.
    Definition: delegate.hpp:86
    + + + + diff --git a/menu.js b/menu.js index 97db4c239..433c15b8f 100644 --- a/menu.js +++ b/menu.js @@ -1,3 +1,26 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { function makeTree(data,relPath) { var result=''; @@ -17,10 +40,11 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); if (searchEnabled) { if (serverSide) { - $('#main-menu').append('
  • '); + $('#main-menu').append('
  • '); } else { $('#main-menu').append('
  • '); } } $('#main-menu').smartmenus(); } +/* @license-end */ diff --git a/menudata.js b/menudata.js index 93bfae046..5b7bdbc10 100644 --- a/menudata.js +++ b/menudata.js @@ -1,3 +1,25 @@ +/* +@licstart The following is the entire license notice for the +JavaScript code in this file. + +Copyright (C) 1997-2019 by Dimitri van Heesch + +This program is free software; you can redistribute it and/or modify +it under the terms of version 2 of the GNU General Public License as published by +the Free Software Foundation + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +@licend The above is the entire license notice +for the JavaScript code in this file +*/ var menudata={children:[ {text:"Main Page",url:"index.html"}, {text:"Related Pages",url:"pages.html"}, @@ -50,7 +72,7 @@ var menudata={children:[ {text:"v",url:"functions_v.html#index_v"}, {text:"w",url:"functions_w.html#index_w"}, {text:"y",url:"functions_y.html#index_y"}, -{text:"~",url:"functions_0x7e.html#index_0x7e"}]}, +{text:"~",url:"functions_~.html#index__7E"}]}, {text:"Functions",url:"functions_func.html",children:[ {text:"a",url:"functions_func.html#index_a"}, {text:"b",url:"functions_func_b.html#index_b"}, @@ -73,7 +95,7 @@ var menudata={children:[ {text:"v",url:"functions_func_v.html#index_v"}, {text:"w",url:"functions_func_w.html#index_w"}, {text:"y",url:"functions_func_y.html#index_y"}, -{text:"~",url:"functions_func_0x7e.html#index_0x7e"}]}, +{text:"~",url:"functions_func_~.html#index__7E"}]}, {text:"Variables",url:"functions_vars.html"}, {text:"Typedefs",url:"functions_type.html",children:[ {text:"c",url:"functions_type.html#index_c"}, diff --git a/meta_8hpp_source.html b/meta_8hpp_source.html index 9eb956950..448422456 100644 --- a/meta_8hpp_source.html +++ b/meta_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/meta/meta.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */
    meta.hpp
    -
    1 #ifndef ENTT_META_META_HPP
    2 #define ENTT_META_META_HPP
    3 
    4 
    5 #include <array>
    6 #include <memory>
    7 #include <cstring>
    8 #include <cstddef>
    9 #include <utility>
    10 #include <type_traits>
    11 #include "../config/config.h"
    12 #include "../core/type_traits.hpp"
    13 #include "../core/utility.hpp"
    14 
    15 
    16 namespace entt {
    17 
    18 
    19 class meta_any;
    20 class meta_handle;
    21 class meta_type;
    22 
    23 
    30 namespace internal {
    31 
    32 
    33 struct meta_type_node;
    34 
    35 
    36 struct meta_prop_node {
    37  meta_prop_node * next;
    38  meta_any(* const key)();
    39  meta_any(* const value)();
    40 };
    41 
    42 
    43 struct meta_base_node {
    44  meta_type_node * const parent;
    45  meta_base_node * next;
    46  meta_type_node *(* const type)() ENTT_NOEXCEPT;
    47  void *(* const cast)(void *) ENTT_NOEXCEPT;
    48 };
    49 
    50 
    51 struct meta_conv_node {
    52  meta_type_node * const parent;
    53  meta_conv_node * next;
    54  meta_type_node *(* const type)() ENTT_NOEXCEPT;
    55  meta_any(* const conv)(const void *);
    56 };
    57 
    58 
    59 struct meta_ctor_node {
    60  using size_type = std::size_t;
    61  meta_type_node * const parent;
    62  meta_ctor_node * next;
    63  meta_prop_node * prop;
    64  const size_type size;
    65  meta_type_node *(* const arg)(size_type) ENTT_NOEXCEPT;
    66  meta_any(* const invoke)(meta_any * const);
    67 };
    68 
    69 
    70 struct meta_dtor_node {
    71  meta_type_node * const parent;
    72  bool(* const invoke)(meta_handle);
    73 };
    74 
    75 
    76 struct meta_data_node {
    77  ENTT_ID_TYPE identifier;
    78  meta_type_node * const parent;
    79  meta_data_node * next;
    80  meta_prop_node * prop;
    81  const bool is_const;
    82  const bool is_static;
    83  meta_type_node *(* const type)() ENTT_NOEXCEPT;
    84  bool(* const set)(meta_handle, meta_any, meta_any);
    85  meta_any(* const get)(meta_handle, meta_any);
    86 };
    87 
    88 
    89 struct meta_func_node {
    90  using size_type = std::size_t;
    91  ENTT_ID_TYPE identifier;
    92  meta_type_node * const parent;
    93  meta_func_node * next;
    94  meta_prop_node * prop;
    95  const size_type size;
    96  const bool is_const;
    97  const bool is_static;
    98  meta_type_node *(* const ret)() ENTT_NOEXCEPT;
    99  meta_type_node *(* const arg)(size_type) ENTT_NOEXCEPT;
    100  meta_any(* const invoke)(meta_handle, meta_any *);
    101 };
    102 
    103 
    104 struct meta_type_node {
    105  using size_type = std::size_t;
    106  ENTT_ID_TYPE identifier;
    107  meta_type_node * next;
    108  meta_prop_node * prop;
    109  const bool is_void;
    110  const bool is_integral;
    111  const bool is_floating_point;
    112  const bool is_array;
    113  const bool is_enum;
    114  const bool is_union;
    115  const bool is_class;
    116  const bool is_pointer;
    117  const bool is_function_pointer;
    118  const bool is_member_object_pointer;
    119  const bool is_member_function_pointer;
    120  const size_type extent;
    121  bool(* const compare)(const void *, const void *);
    122  meta_type_node *(* const remove_pointer)() ENTT_NOEXCEPT;
    123  meta_type_node *(* const remove_extent)() ENTT_NOEXCEPT;
    124  meta_base_node *base{nullptr};
    125  meta_conv_node *conv{nullptr};
    126  meta_ctor_node *ctor{nullptr};
    127  meta_dtor_node *dtor{nullptr};
    128  meta_data_node *data{nullptr};
    129  meta_func_node *func{nullptr};
    130 };
    131 
    132 
    133 template<typename Type, typename Op, typename Node>
    134 void iterate(Op op, Node *curr) ENTT_NOEXCEPT {
    135  while(curr) {
    136  op(Type{curr});
    137  curr = curr->next;
    138  }
    139 }
    140 
    141 
    142 template<auto Member, typename Type, typename Op>
    143 void iterate(Op op, const meta_type_node *node) ENTT_NOEXCEPT {
    144  if(node) {
    145  auto *curr = node->base;
    146  iterate<Type>(op, node->*Member);
    147 
    148  while(curr) {
    149  iterate<Member, Type>(op, curr->type());
    150  curr = curr->next;
    151  }
    152  }
    153 }
    154 
    155 
    156 template<typename Op, typename Node>
    157 auto find_if(Op op, Node *curr) ENTT_NOEXCEPT {
    158  while(curr && !op(curr)) {
    159  curr = curr->next;
    160  }
    161 
    162  return curr;
    163 }
    164 
    165 
    166 template<auto Member, typename Op>
    167 auto find_if(Op op, const meta_type_node *node) ENTT_NOEXCEPT
    168 -> decltype(find_if(op, node->*Member)) {
    169  decltype(find_if(op, node->*Member)) ret = nullptr;
    170 
    171  if(node) {
    172  ret = find_if(op, node->*Member);
    173  auto *curr = node->base;
    174 
    175  while(curr && !ret) {
    176  ret = find_if<Member>(op, curr->type());
    177  curr = curr->next;
    178  }
    179  }
    180 
    181  return ret;
    182 }
    183 
    184 
    185 template<typename Type>
    186 static bool compare(const void *lhs, const void *rhs) {
    187  if constexpr(!std::is_function_v<Type> && is_equality_comparable_v<Type>) {
    188  return *static_cast<const Type *>(lhs) == *static_cast<const Type *>(rhs);
    189  } else {
    190  return lhs == rhs;
    191  }
    192 }
    193 
    194 
    195 template<typename...>
    196 struct meta_node;
    197 
    198 
    199 template<>
    200 struct meta_node<> {
    201  inline static meta_type_node *local = nullptr;
    202  inline static meta_type_node **global = &local;
    203 };
    204 
    205 
    206 template<typename Type>
    207 struct meta_node<Type> {
    208  static_assert(std::is_same_v<Type, std::remove_cv_t<std::remove_reference_t<Type>>>);
    209 
    210  static void reset() ENTT_NOEXCEPT {
    211  auto * const node = resolve();
    212  auto **it = meta_node<>::global;
    213 
    214  while(*it && *it != node) {
    215  it = &(*it)->next;
    216  }
    217 
    218  if(*it) {
    219  *it = (*it)->next;
    220  }
    221 
    222  const auto unregister_all = y_combinator{
    223  [](auto &&self, auto **curr, auto... member) {
    224  while(*curr) {
    225  auto *prev = *curr;
    226  (self(&(prev->*member)), ...);
    227  *curr = prev->next;
    228  prev->next = nullptr;
    229  }
    230  }
    231  };
    232 
    233  unregister_all(&node->prop);
    234  unregister_all(&node->base);
    235  unregister_all(&node->conv);
    236  unregister_all(&node->ctor, &internal::meta_ctor_node::prop);
    237  unregister_all(&node->data, &internal::meta_data_node::prop);
    238  unregister_all(&node->func, &internal::meta_func_node::prop);
    239 
    240  node->identifier = {};
    241  node->dtor = nullptr;
    242  node->next = nullptr;
    243  }
    244 
    245  static meta_type_node * resolve() ENTT_NOEXCEPT {
    246  static meta_type_node node{
    247  {},
    248  nullptr,
    249  nullptr,
    250  std::is_void_v<Type>,
    251  std::is_integral_v<Type>,
    252  std::is_floating_point_v<Type>,
    253  std::is_array_v<Type>,
    254  std::is_enum_v<Type>,
    255  std::is_union_v<Type>,
    256  std::is_class_v<Type>,
    257  std::is_pointer_v<Type>,
    258  std::is_pointer_v<Type> && std::is_function_v<std::remove_pointer_t<Type>>,
    259  std::is_member_object_pointer_v<Type>,
    260  std::is_member_function_pointer_v<Type>,
    261  std::extent_v<Type>,
    262  &compare<Type>, // workaround for an issue with VS2017
    263  []() ENTT_NOEXCEPT -> meta_type_node * {
    264  return meta_node<std::remove_const_t<std::remove_pointer_t<Type>>>::resolve();
    265  },
    266  []() ENTT_NOEXCEPT -> meta_type_node * {
    267  return meta_node<std::remove_const_t<std::remove_extent_t<Type>>>::resolve();
    268  }
    269  };
    270 
    271  if constexpr(is_named_type_v<Type>) {
    272  auto *candidate = internal::find_if([](auto *curr) {
    273  return curr->identifier == named_type_traits_v<Type>;
    274  }, *meta_node<>::global);
    275 
    276  return candidate ? candidate : &node;
    277  } else {
    278  return &node;
    279  }
    280  }
    281 };
    282 
    283 
    284 template<typename... Type>
    285 struct meta_info: meta_node<std::remove_cv_t<std::remove_reference_t<Type>>...> {};
    286 
    287 
    288 }
    289 
    290 
    312 class meta_any {
    314  friend class meta_handle;
    315 
    316  using storage_type = std::aligned_storage_t<sizeof(void *), alignof(void *)>;
    317  using copy_fn_type = void *(storage_type &, const void *);
    318  using destroy_fn_type = void(void *);
    319  using steal_fn_type = void *(storage_type &, void *, destroy_fn_type *);
    320 
    321  template<typename Type>
    322  static Type * release(Type *instance) {
    323  const auto * const node = internal::meta_info<Type>::resolve();
    324  [[maybe_unused]] const bool destroyed = (!node->dtor || node->dtor->invoke(*instance));
    325  ENTT_ASSERT(destroyed);
    326  return instance;
    327  }
    328 
    329  template<typename Type, typename = std::void_t<>>
    330  struct type_traits {
    331  template<typename... Args>
    332  static void * instance(storage_type &storage, Args &&... args) {
    333  auto instance = std::make_unique<Type>(std::forward<Args>(args)...);
    334  new (&storage) Type *{instance.get()};
    335  return instance.release();
    336  }
    337 
    338  static void destroy(void *instance) {
    339  delete release<Type>(static_cast<Type *>(instance));
    340  }
    341 
    342  static void * copy(storage_type &storage, const void *other) {
    343  auto instance = std::make_unique<Type>(*static_cast<const Type *>(other));
    344  new (&storage) Type *{instance.get()};
    345  return instance.release();
    346  }
    347 
    348  static void * steal(storage_type &to, void *from, destroy_fn_type *) {
    349  auto * const instance = static_cast<Type *>(from);
    350  new (&to) Type *{instance};
    351  return instance;
    352  }
    353  };
    354 
    355  template<typename Type>
    356  struct type_traits<Type, std::enable_if_t<sizeof(Type) <= sizeof(void *) && std::is_nothrow_move_constructible_v<Type>>> {
    357  template<typename... Args>
    358  static void * instance(storage_type &storage, Args &&... args) {
    359  return new (&storage) Type{std::forward<Args>(args)...};
    360  }
    361 
    362  static void destroy(void *instance) {
    363  release<Type>(static_cast<Type *>(instance))->~Type();
    364  }
    365 
    366  static void * copy(storage_type &storage, const void *instance) {
    367  return new (&storage) Type{*static_cast<const Type *>(instance)};
    368  }
    369 
    370  static void * steal(storage_type &to, void *from, destroy_fn_type *destroy_fn) {
    371  void * const instance = new (&to) Type{std::move(*static_cast<Type *>(from))};
    372  destroy_fn(from);
    373  return instance;
    374  }
    375  };
    376 
    377 public:
    379  meta_any() ENTT_NOEXCEPT
    380  : storage{},
    381  instance{nullptr},
    382  node{nullptr},
    383  destroy_fn{nullptr},
    384  copy_fn{nullptr},
    385  steal_fn{nullptr}
    386  {}
    387 
    394  template<typename Type, typename... Args>
    395  explicit meta_any(std::in_place_type_t<Type>, [[maybe_unused]] Args &&... args)
    396  : meta_any{}
    397  {
    398  node = internal::meta_info<Type>::resolve();
    399 
    400  if constexpr(!std::is_void_v<Type>) {
    401  using traits_type = type_traits<std::remove_cv_t<std::remove_reference_t<Type>>>;
    402  static_assert(std::is_copy_constructible_v<Type>);
    403 
    404  instance = traits_type::instance(storage, std::forward<Args>(args)...);
    405  destroy_fn = &traits_type::destroy;
    406  copy_fn = &traits_type::copy;
    407  steal_fn = &traits_type::steal;
    408  }
    409  }
    410 
    416  template<typename Type>
    417  explicit meta_any(std::reference_wrapper<Type> type)
    418  : meta_any{}
    419  {
    420  node = internal::meta_info<Type>::resolve();
    421  instance = &type.get();
    422  }
    423 
    428  inline meta_any(meta_handle handle) ENTT_NOEXCEPT;
    429 
    435  template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::remove_cv_t<std::remove_reference_t<Type>>, meta_any>>>
    436  meta_any(Type &&type)
    437  : meta_any{std::in_place_type<std::remove_cv_t<std::remove_reference_t<Type>>>, std::forward<Type>(type)}
    438  {}
    439 
    444  meta_any(const meta_any &other)
    445  : meta_any{}
    446  {
    447  node = other.node;
    448  instance = other.copy_fn ? other.copy_fn(storage, other.instance) : other.instance;
    449  destroy_fn = other.destroy_fn;
    450  copy_fn = other.copy_fn;
    451  steal_fn = other.steal_fn;
    452  }
    453 
    463  meta_any(meta_any &&other) ENTT_NOEXCEPT
    464  : meta_any{}
    465  {
    466  swap(*this, other);
    467  }
    468 
    471  if(destroy_fn) {
    472  destroy_fn(instance);
    473  }
    474  }
    475 
    482  template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::remove_cv_t<std::remove_reference_t<Type>>, meta_any>>>
    483  meta_any & operator=(Type &&type) {
    484  return (*this = meta_any{std::forward<Type>(type)});
    485  }
    486 
    492  meta_any & operator=(const meta_any &other) {
    493  return (*this = meta_any{other});
    494  }
    495 
    501  meta_any & operator=(meta_any &&other) ENTT_NOEXCEPT {
    502  meta_any any{std::move(other)};
    503  swap(any, *this);
    504  return *this;
    505  }
    506 
    511  inline meta_type type() const ENTT_NOEXCEPT;
    512 
    517  const void * data() const ENTT_NOEXCEPT {
    518  return instance;
    519  }
    520 
    522  void * data() ENTT_NOEXCEPT {
    523  return const_cast<void *>(std::as_const(*this).data());
    524  }
    525 
    531  template<typename Type>
    532  const Type * try_cast() const ENTT_NOEXCEPT {
    533  const auto * const type = internal::meta_info<Type>::resolve();
    534  void *ret = nullptr;
    535 
    536  if(node == type) {
    537  ret = instance;
    538  } else {
    539  const auto *base = internal::find_if<&internal::meta_type_node::base>([type](auto *candidate) {
    540  return candidate->type() == type;
    541  }, node);
    542 
    543  ret = base ? base->cast(instance) : nullptr;
    544  }
    545 
    546  return static_cast<const Type *>(ret);
    547  }
    548 
    550  template<typename Type>
    551  Type * try_cast() ENTT_NOEXCEPT {
    552  return const_cast<Type *>(std::as_const(*this).try_cast<Type>());
    553  }
    554 
    569  template<typename Type>
    570  const Type & cast() const ENTT_NOEXCEPT {
    571  auto * const actual = try_cast<Type>();
    572  ENTT_ASSERT(actual);
    573  return *actual;
    574  }
    575 
    577  template<typename Type>
    578  Type & cast() ENTT_NOEXCEPT {
    579  return const_cast<Type &>(std::as_const(*this).cast<Type>());
    580  }
    581 
    588  template<typename Type>
    589  meta_any convert() const {
    590  meta_any any{};
    591 
    592  if(const auto * const type = internal::meta_info<Type>::resolve(); node == type) {
    593  any = *static_cast<const Type *>(instance);
    594  } else {
    595  const auto * const conv = internal::find_if<&internal::meta_type_node::conv>([type](auto *other) {
    596  return other->type() == type;
    597  }, node);
    598 
    599  if(conv) {
    600  any = conv->conv(instance);
    601  }
    602  }
    603 
    604  return any;
    605  }
    606 
    612  template<typename Type>
    613  bool convert() {
    614  bool valid = (node == internal::meta_info<Type>::resolve());
    615 
    616  if(!valid) {
    617  if(auto any = std::as_const(*this).convert<Type>(); any) {
    618  swap(any, *this);
    619  valid = true;
    620  }
    621  }
    622 
    623  return valid;
    624  }
    625 
    633  template<typename Type, typename... Args>
    634  void emplace(Args &&... args) {
    635  *this = meta_any{std::in_place_type_t<Type>{}, std::forward<Args>(args)...};
    636  }
    637 
    642  explicit operator bool() const ENTT_NOEXCEPT {
    643  return node;
    644  }
    645 
    652  bool operator==(const meta_any &other) const ENTT_NOEXCEPT {
    653  return node == other.node && (!node || node->compare(instance, other.instance));
    654  }
    655 
    661  friend void swap(meta_any &lhs, meta_any &rhs) ENTT_NOEXCEPT {
    662  if(lhs.steal_fn && rhs.steal_fn) {
    663  storage_type buffer;
    664  auto * const temp = lhs.steal_fn(buffer, lhs.instance, lhs.destroy_fn);
    665  lhs.instance = rhs.steal_fn(lhs.storage, rhs.instance, rhs.destroy_fn);
    666  rhs.instance = lhs.steal_fn(rhs.storage, temp, lhs.destroy_fn);
    667  } else if(lhs.steal_fn) {
    668  lhs.instance = lhs.steal_fn(rhs.storage, lhs.instance, lhs.destroy_fn);
    669  std::swap(rhs.instance, lhs.instance);
    670  } else if(rhs.steal_fn) {
    671  rhs.instance = rhs.steal_fn(lhs.storage, rhs.instance, rhs.destroy_fn);
    672  std::swap(rhs.instance, lhs.instance);
    673  } else {
    674  std::swap(lhs.instance, rhs.instance);
    675  }
    676 
    677  std::swap(lhs.node, rhs.node);
    678  std::swap(lhs.destroy_fn, rhs.destroy_fn);
    679  std::swap(lhs.copy_fn, rhs.copy_fn);
    680  std::swap(lhs.steal_fn, rhs.steal_fn);
    681  }
    682 
    683 private:
    684  storage_type storage;
    685  void *instance;
    686  const internal::meta_type_node *node;
    687  destroy_fn_type *destroy_fn;
    688  copy_fn_type *copy_fn;
    689  steal_fn_type *steal_fn;
    690 };
    691 
    692 
    701 class meta_handle {
    703  friend class meta_any;
    704 
    705 public:
    707  meta_handle() ENTT_NOEXCEPT
    708  : node{nullptr},
    709  instance{nullptr}
    710  {}
    711 
    716  meta_handle(meta_any &any) ENTT_NOEXCEPT
    717  : node{any.node},
    718  instance{any.instance}
    719  {}
    720 
    726  template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::remove_cv_t<std::remove_reference_t<Type>>, meta_handle>>>
    727  meta_handle(Type &obj) ENTT_NOEXCEPT
    728  : node{internal::meta_info<Type>::resolve()},
    729  instance{&obj}
    730  {}
    731 
    733  inline meta_type type() const ENTT_NOEXCEPT;
    734 
    736  const void * data() const ENTT_NOEXCEPT {
    737  return instance;
    738  }
    739 
    741  void * data() ENTT_NOEXCEPT {
    742  return const_cast<void *>(std::as_const(*this).data());
    743  }
    744 
    749  explicit operator bool() const ENTT_NOEXCEPT {
    750  return instance;
    751  }
    752 
    753 private:
    754  const internal::meta_type_node *node;
    755  void *instance;
    756 };
    757 
    758 
    765 inline bool operator!=(const meta_any &lhs, const meta_any &rhs) ENTT_NOEXCEPT {
    766  return !(lhs == rhs);
    767 }
    768 
    769 
    771 struct meta_prop {
    776  meta_prop(const internal::meta_prop_node *curr = nullptr) ENTT_NOEXCEPT
    777  : node{curr}
    778  {}
    779 
    784  meta_any key() const ENTT_NOEXCEPT {
    785  return node->key();
    786  }
    787 
    792  meta_any value() const ENTT_NOEXCEPT {
    793  return node->value();
    794  }
    795 
    800  explicit operator bool() const ENTT_NOEXCEPT {
    801  return node;
    802  }
    803 
    810  bool operator==(const meta_prop &other) const ENTT_NOEXCEPT {
    811  return node == other.node;
    812  }
    813 
    814 private:
    815  const internal::meta_prop_node *node;
    816 };
    817 
    818 
    825 inline bool operator!=(const meta_prop &lhs, const meta_prop &rhs) ENTT_NOEXCEPT {
    826  return !(lhs == rhs);
    827 }
    828 
    829 
    831 struct meta_base {
    833  meta_base(const internal::meta_base_node *curr = nullptr) ENTT_NOEXCEPT
    834  : node{curr}
    835  {}
    836 
    841  inline meta_type parent() const ENTT_NOEXCEPT;
    842 
    844  inline meta_type type() const ENTT_NOEXCEPT;
    845 
    851  void * cast(void *instance) const ENTT_NOEXCEPT {
    852  return node->cast(instance);
    853  }
    854 
    859  explicit operator bool() const ENTT_NOEXCEPT {
    860  return node;
    861  }
    862 
    864  bool operator==(const meta_base &other) const ENTT_NOEXCEPT {
    865  return node == other.node;
    866  }
    867 
    868 private:
    869  const internal::meta_base_node *node;
    870 };
    871 
    872 
    874 inline bool operator!=(const meta_base &lhs, const meta_base &rhs) ENTT_NOEXCEPT {
    875  return !(lhs == rhs);
    876 }
    877 
    878 
    880 struct meta_conv {
    882  meta_conv(const internal::meta_conv_node *curr = nullptr) ENTT_NOEXCEPT
    883  : node{curr}
    884  {}
    885 
    887  inline meta_type parent() const ENTT_NOEXCEPT;
    888 
    890  inline meta_type type() const ENTT_NOEXCEPT;
    891 
    897  meta_any convert(const void *instance) const ENTT_NOEXCEPT {
    898  return node->conv(instance);
    899  }
    900 
    905  explicit operator bool() const ENTT_NOEXCEPT {
    906  return node;
    907  }
    908 
    910  bool operator==(const meta_conv &other) const ENTT_NOEXCEPT {
    911  return node == other.node;
    912  }
    913 
    914 private:
    915  const internal::meta_conv_node *node;
    916 };
    917 
    918 
    920 inline bool operator!=(const meta_conv &lhs, const meta_conv &rhs) ENTT_NOEXCEPT {
    921  return !(lhs == rhs);
    922 }
    923 
    924 
    926 struct meta_ctor {
    928  using size_type = typename internal::meta_ctor_node::size_type;
    929 
    931  meta_ctor(const internal::meta_ctor_node *curr = nullptr) ENTT_NOEXCEPT
    932  : node{curr}
    933  {}
    934 
    936  inline meta_type parent() const ENTT_NOEXCEPT;
    937 
    942  size_type size() const ENTT_NOEXCEPT {
    943  return node->size;
    944  }
    945 
    951  meta_type arg(size_type index) const ENTT_NOEXCEPT;
    952 
    964  template<typename... Args>
    965  meta_any invoke(Args &&... args) const {
    966  std::array<meta_any, sizeof...(Args)> arguments{{std::forward<Args>(args)...}};
    967  meta_any any{};
    968 
    969  if(sizeof...(Args) == size()) {
    970  any = node->invoke(arguments.data());
    971  }
    972 
    973  return any;
    974  }
    975 
    981  template<typename Op>
    982  std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>
    983  prop(Op op) const ENTT_NOEXCEPT {
    984  internal::iterate<meta_prop>(std::move(op), node->prop);
    985  }
    986 
    992  meta_prop prop(meta_any key) const ENTT_NOEXCEPT {
    993  return internal::find_if([key = std::move(key)](auto *candidate) {
    994  return candidate->key() == key;
    995  }, node->prop);
    996  }
    997 
    1002  explicit operator bool() const ENTT_NOEXCEPT {
    1003  return node;
    1004  }
    1005 
    1007  bool operator==(const meta_ctor &other) const ENTT_NOEXCEPT {
    1008  return node == other.node;
    1009  }
    1010 
    1011 private:
    1012  const internal::meta_ctor_node *node;
    1013 };
    1014 
    1015 
    1017 inline bool operator!=(const meta_ctor &lhs, const meta_ctor &rhs) ENTT_NOEXCEPT {
    1018  return !(lhs == rhs);
    1019 }
    1020 
    1021 
    1023 struct meta_dtor {
    1025  meta_dtor(const internal::meta_dtor_node *curr = nullptr) ENTT_NOEXCEPT
    1026  : node{curr}
    1027  {}
    1028 
    1030  inline meta_type parent() const ENTT_NOEXCEPT;
    1031 
    1042  bool invoke(meta_handle handle) const {
    1043  return node->invoke(handle);
    1044  }
    1045 
    1050  explicit operator bool() const ENTT_NOEXCEPT {
    1051  return node;
    1052  }
    1053 
    1055  bool operator==(const meta_dtor &other) const ENTT_NOEXCEPT {
    1056  return node == other.node;
    1057  }
    1058 
    1059 private:
    1060  const internal::meta_dtor_node *node;
    1061 };
    1062 
    1063 
    1065 inline bool operator!=(const meta_dtor &lhs, const meta_dtor &rhs) ENTT_NOEXCEPT {
    1066  return !(lhs == rhs);
    1067 }
    1068 
    1069 
    1071 struct meta_data {
    1073  meta_data(const internal::meta_data_node *curr = nullptr) ENTT_NOEXCEPT
    1074  : node{curr}
    1075  {}
    1076 
    1078  ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT {
    1079  return node->identifier;
    1080  }
    1081 
    1083  inline meta_type parent() const ENTT_NOEXCEPT;
    1084 
    1089  bool is_const() const ENTT_NOEXCEPT {
    1090  return node->is_const;
    1091  }
    1092 
    1101  bool is_static() const ENTT_NOEXCEPT {
    1102  return node->is_static;
    1103  }
    1104 
    1106  inline meta_type type() const ENTT_NOEXCEPT;
    1107 
    1122  template<typename Type>
    1123  bool set(meta_handle handle, Type &&value) const {
    1124  return node->set(handle, meta_any{}, std::forward<Type>(value));
    1125  }
    1126 
    1142  template<typename Type>
    1143  bool set(meta_handle handle, std::size_t index, Type &&value) const {
    1144  ENTT_ASSERT(index < node->type()->extent);
    1145  return node->set(handle, index, std::forward<Type>(value));
    1146  }
    1147 
    1157  meta_any get(meta_handle handle) const ENTT_NOEXCEPT {
    1158  return node->get(handle, meta_any{});
    1159  }
    1160 
    1171  meta_any get(meta_handle handle, std::size_t index) const ENTT_NOEXCEPT {
    1172  ENTT_ASSERT(index < node->type()->extent);
    1173  return node->get(handle, index);
    1174  }
    1175 
    1181  template<typename Op>
    1182  std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>
    1183  prop(Op op) const ENTT_NOEXCEPT {
    1184  internal::iterate<meta_prop>(std::move(op), node->prop);
    1185  }
    1186 
    1192  meta_prop prop(meta_any key) const ENTT_NOEXCEPT {
    1193  return internal::find_if([key = std::move(key)](auto *candidate) {
    1194  return candidate->key() == key;
    1195  }, node->prop);
    1196  }
    1197 
    1202  explicit operator bool() const ENTT_NOEXCEPT {
    1203  return node;
    1204  }
    1205 
    1207  bool operator==(const meta_data &other) const ENTT_NOEXCEPT {
    1208  return node == other.node;
    1209  }
    1210 
    1211 private:
    1212  const internal::meta_data_node *node;
    1213 };
    1214 
    1215 
    1217 inline bool operator!=(const meta_data &lhs, const meta_data &rhs) ENTT_NOEXCEPT {
    1218  return !(lhs == rhs);
    1219 }
    1220 
    1221 
    1223 struct meta_func {
    1225  using size_type = typename internal::meta_func_node::size_type;
    1226 
    1228  meta_func(const internal::meta_func_node *curr = nullptr) ENTT_NOEXCEPT
    1229  : node{curr}
    1230  {}
    1231 
    1233  ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT {
    1234  return node->identifier;
    1235  }
    1236 
    1238  inline meta_type parent() const ENTT_NOEXCEPT;
    1239 
    1244  size_type size() const ENTT_NOEXCEPT {
    1245  return node->size;
    1246  }
    1247 
    1252  bool is_const() const ENTT_NOEXCEPT {
    1253  return node->is_const;
    1254  }
    1255 
    1264  bool is_static() const ENTT_NOEXCEPT {
    1265  return node->is_static;
    1266  }
    1267 
    1272  inline meta_type ret() const ENTT_NOEXCEPT;
    1273 
    1279  inline meta_type arg(size_type index) const ENTT_NOEXCEPT;
    1280 
    1296  template<typename... Args>
    1297  meta_any invoke(meta_handle handle, Args &&... args) const {
    1298  // makes aliasing on the values and passes forward references if any
    1299  std::array<meta_any, sizeof...(Args)> arguments{{meta_handle{args}...}};
    1300  meta_any any{};
    1301 
    1302  if(sizeof...(Args) == size()) {
    1303  any = node->invoke(handle, arguments.data());
    1304  }
    1305 
    1306  return any;
    1307  }
    1308 
    1314  template<typename Op>
    1315  std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>
    1316  prop(Op op) const ENTT_NOEXCEPT {
    1317  internal::iterate<meta_prop>(std::move(op), node->prop);
    1318  }
    1319 
    1325  meta_prop prop(meta_any key) const ENTT_NOEXCEPT {
    1326  return internal::find_if([key = std::move(key)](auto *candidate) {
    1327  return candidate->key() == key;
    1328  }, node->prop);
    1329  }
    1330 
    1335  explicit operator bool() const ENTT_NOEXCEPT {
    1336  return node;
    1337  }
    1338 
    1340  bool operator==(const meta_func &other) const ENTT_NOEXCEPT {
    1341  return node == other.node;
    1342  }
    1343 
    1344 private:
    1345  const internal::meta_func_node *node;
    1346 };
    1347 
    1348 
    1350 inline bool operator!=(const meta_func &lhs, const meta_func &rhs) ENTT_NOEXCEPT {
    1351  return !(lhs == rhs);
    1352 }
    1353 
    1354 
    1356 class meta_type {
    1357  template<typename... Args, std::size_t... Indexes>
    1358  auto ctor(std::index_sequence<Indexes...>) const ENTT_NOEXCEPT {
    1359  return internal::find_if([](auto *candidate) {
    1360  return candidate->size == sizeof...(Args) && ([](auto *from, auto *to) {
    1361  return (from == to) || internal::find_if<&internal::meta_type_node::base>([to](auto *curr) { return curr->type() == to; }, from)
    1362  || internal::find_if<&internal::meta_type_node::conv>([to](auto *curr) { return curr->type() == to; }, from);
    1363  }(internal::meta_info<Args>::resolve(), candidate->arg(Indexes)) && ...);
    1364  }, node->ctor);
    1365  }
    1366 
    1367 public:
    1369  using size_type = typename internal::meta_type_node::size_type;
    1370 
    1372  meta_type(const internal::meta_type_node *curr = nullptr) ENTT_NOEXCEPT
    1373  : node{curr}
    1374  {}
    1375 
    1380  ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT {
    1381  return node->identifier;
    1382  }
    1383 
    1388  bool is_void() const ENTT_NOEXCEPT {
    1389  return node->is_void;
    1390  }
    1391 
    1397  bool is_integral() const ENTT_NOEXCEPT {
    1398  return node->is_integral;
    1399  }
    1400 
    1407  bool is_floating_point() const ENTT_NOEXCEPT {
    1408  return node->is_floating_point;
    1409  }
    1410 
    1416  bool is_array() const ENTT_NOEXCEPT {
    1417  return node->is_array;
    1418  }
    1419 
    1424  bool is_enum() const ENTT_NOEXCEPT {
    1425  return node->is_enum;
    1426  }
    1427 
    1432  bool is_union() const ENTT_NOEXCEPT {
    1433  return node->is_union;
    1434  }
    1435 
    1440  bool is_class() const ENTT_NOEXCEPT {
    1441  return node->is_class;
    1442  }
    1443 
    1448  bool is_pointer() const ENTT_NOEXCEPT {
    1449  return node->is_pointer;
    1450  }
    1451 
    1458  bool is_function_pointer() const ENTT_NOEXCEPT {
    1459  return node->is_function_pointer;
    1460  }
    1461 
    1468  bool is_member_object_pointer() const ENTT_NOEXCEPT {
    1469  return node->is_member_object_pointer;
    1470  }
    1471 
    1478  bool is_member_function_pointer() const ENTT_NOEXCEPT {
    1479  return node->is_member_function_pointer;
    1480  }
    1481 
    1488  size_type extent() const ENTT_NOEXCEPT {
    1489  return node->extent;
    1490  }
    1491 
    1497  meta_type remove_pointer() const ENTT_NOEXCEPT {
    1498  return node->remove_pointer();
    1499  }
    1500 
    1506  meta_type remove_extent() const ENTT_NOEXCEPT {
    1507  return node->remove_extent();
    1508  }
    1509 
    1518  template<typename Op>
    1519  std::enable_if_t<std::is_invocable_v<Op, meta_base>, void>
    1520  base(Op op) const ENTT_NOEXCEPT {
    1521  internal::iterate<&internal::meta_type_node::base, meta_base>(std::move(op), node);
    1522  }
    1523 
    1532  meta_base base(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT {
    1533  return internal::find_if<&internal::meta_type_node::base>([identifier](auto *candidate) {
    1534  return candidate->type()->identifier == identifier;
    1535  }, node);
    1536  }
    1537 
    1547  template<typename Op>
    1548  void conv(Op op) const ENTT_NOEXCEPT {
    1549  internal::iterate<&internal::meta_type_node::conv, meta_conv>(std::move(op), node);
    1550  }
    1551 
    1562  template<typename Type>
    1563  meta_conv conv() const ENTT_NOEXCEPT {
    1564  return internal::find_if<&internal::meta_type_node::conv>([type = internal::meta_info<Type>::resolve()](auto *candidate) {
    1565  return candidate->type() == type;
    1566  }, node);
    1567  }
    1568 
    1574  template<typename Op>
    1575  void ctor(Op op) const ENTT_NOEXCEPT {
    1576  internal::iterate<meta_ctor>(std::move(op), node->ctor);
    1577  }
    1578 
    1584  template<typename... Args>
    1585  meta_ctor ctor() const ENTT_NOEXCEPT {
    1586  return ctor<Args...>(std::index_sequence_for<Args...>{});
    1587  }
    1588 
    1593  meta_dtor dtor() const ENTT_NOEXCEPT {
    1594  return node->dtor;
    1595  }
    1596 
    1606  template<typename Op>
    1607  std::enable_if_t<std::is_invocable_v<Op, meta_data>, void>
    1608  data(Op op) const ENTT_NOEXCEPT {
    1609  internal::iterate<&internal::meta_type_node::data, meta_data>(std::move(op), node);
    1610  }
    1611 
    1622  meta_data data(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT {
    1623  return internal::find_if<&internal::meta_type_node::data>([identifier](auto *candidate) {
    1624  return candidate->identifier == identifier;
    1625  }, node);
    1626  }
    1627 
    1638  template<typename Op>
    1639  std::enable_if_t<std::is_invocable_v<Op, meta_func>, void>
    1640  func(Op op) const ENTT_NOEXCEPT {
    1641  internal::iterate<&internal::meta_type_node::func, meta_func>(std::move(op), node);
    1642  }
    1643 
    1654  meta_func func(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT {
    1655  return internal::find_if<&internal::meta_type_node::func>([identifier](auto *candidate) {
    1656  return candidate->identifier == identifier;
    1657  }, node);
    1658  }
    1659 
    1671  template<typename... Args>
    1672  meta_any construct(Args &&... args) const {
    1673  std::array<meta_any, sizeof...(Args)> arguments{{std::forward<Args>(args)...}};
    1674  meta_any any{};
    1675 
    1676  internal::find_if<&internal::meta_type_node::ctor>([data = arguments.data(), &any](auto *curr) -> bool {
    1677  if(curr->size == sizeof...(args)) {
    1678  any = curr->invoke(data);
    1679  }
    1680 
    1681  return static_cast<bool>(any);
    1682  }, node);
    1683 
    1684  return any;
    1685  }
    1686 
    1699  bool destroy(meta_handle handle) const {
    1700  return (handle.type() == node) && (!node->dtor || node->dtor->invoke(handle));
    1701  }
    1702 
    1712  template<typename Op>
    1713  std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>
    1714  prop(Op op) const ENTT_NOEXCEPT {
    1715  internal::iterate<&internal::meta_type_node::prop, meta_prop>(std::move(op), node);
    1716  }
    1717 
    1728  meta_prop prop(meta_any key) const ENTT_NOEXCEPT {
    1729  return internal::find_if<&internal::meta_type_node::prop>([key = std::move(key)](auto *candidate) {
    1730  return candidate->key() == key;
    1731  }, node);
    1732  }
    1733 
    1738  explicit operator bool() const ENTT_NOEXCEPT {
    1739  return node;
    1740  }
    1741 
    1743  bool operator==(const meta_type &other) const ENTT_NOEXCEPT {
    1744  return node == other.node;
    1745  }
    1746 
    1747 private:
    1748  const internal::meta_type_node *node;
    1749 };
    1750 
    1751 
    1753 struct meta_ctx {
    1758  static void bind(meta_ctx other) ENTT_NOEXCEPT {
    1759  internal::meta_info<>::global = other.ctx;
    1760  }
    1761 
    1762 private:
    1763  internal::meta_type_node **ctx{&internal::meta_info<>::local};
    1764 };
    1765 
    1766 
    1768 inline bool operator!=(const meta_type &lhs, const meta_type &rhs) ENTT_NOEXCEPT {
    1769  return !(lhs == rhs);
    1770 }
    1771 
    1772 
    1773 inline meta_any::meta_any(meta_handle handle) ENTT_NOEXCEPT
    1774  : meta_any{}
    1775 {
    1776  node = handle.node;
    1777  instance = handle.instance;
    1778 }
    1779 
    1780 
    1781 inline meta_type meta_any::type() const ENTT_NOEXCEPT {
    1782  return node;
    1783 }
    1784 
    1785 
    1786 inline meta_type meta_handle::type() const ENTT_NOEXCEPT {
    1787  return node;
    1788 }
    1789 
    1790 
    1791 inline meta_type meta_base::parent() const ENTT_NOEXCEPT {
    1792  return node->parent;
    1793 }
    1794 
    1795 
    1796 inline meta_type meta_base::type() const ENTT_NOEXCEPT {
    1797  return node->type();
    1798 }
    1799 
    1800 
    1801 inline meta_type meta_conv::parent() const ENTT_NOEXCEPT {
    1802  return node->parent;
    1803 }
    1804 
    1805 
    1806 inline meta_type meta_conv::type() const ENTT_NOEXCEPT {
    1807  return node->type();
    1808 }
    1809 
    1810 
    1811 inline meta_type meta_ctor::parent() const ENTT_NOEXCEPT {
    1812  return node->parent;
    1813 }
    1814 
    1815 
    1816 inline meta_type meta_ctor::arg(size_type index) const ENTT_NOEXCEPT {
    1817  return index < size() ? node->arg(index) : nullptr;
    1818 }
    1819 
    1820 
    1821 inline meta_type meta_dtor::parent() const ENTT_NOEXCEPT {
    1822  return node->parent;
    1823 }
    1824 
    1825 
    1826 inline meta_type meta_data::parent() const ENTT_NOEXCEPT {
    1827  return node->parent;
    1828 }
    1829 
    1830 
    1831 inline meta_type meta_data::type() const ENTT_NOEXCEPT {
    1832  return node->type();
    1833 }
    1834 
    1835 
    1836 inline meta_type meta_func::parent() const ENTT_NOEXCEPT {
    1837  return node->parent;
    1838 }
    1839 
    1840 
    1841 inline meta_type meta_func::ret() const ENTT_NOEXCEPT {
    1842  return node->ret();
    1843 }
    1844 
    1845 
    1846 inline meta_type meta_func::arg(size_type index) const ENTT_NOEXCEPT {
    1847  return index < size() ? node->arg(index) : nullptr;
    1848 }
    1849 
    1850 
    1851 }
    1852 
    1853 
    1854 #endif // ENTT_META_META_HPP
    ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT
    Returns the identifier assigned to a given meta object.
    Definition: meta.hpp:1380
    -
    meta_handle(Type &obj) ENTT_NOEXCEPT
    Constructs a meta handle from a given instance.
    Definition: meta.hpp:727
    -
    bool operator==(const meta_type &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:1743
    -
    ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT
    Returns the identifier assigned to a given meta object.
    Definition: meta.hpp:1233
    -
    Shared resource handle.
    Definition: fwd.hpp:14
    -
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1791
    -
    meta_base base(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT
    Returns the meta base associated with a given identifier.
    Definition: meta.hpp:1532
    -
    bool is_static() const ENTT_NOEXCEPT
    Indicates whether a given meta data is static or not.
    Definition: meta.hpp:1101
    -
    bool operator==(const meta_any &other) const ENTT_NOEXCEPT
    Checks if two containers differ in their content.
    Definition: meta.hpp:652
    -
    void * cast(void *instance) const ENTT_NOEXCEPT
    Casts an instance from a parent type to a base type.
    Definition: meta.hpp:851
    -
    meta_any(const meta_any &other)
    Copy constructor.
    Definition: meta.hpp:444
    -
    bool is_enum() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to an enum or not.
    Definition: meta.hpp:1424
    -
    std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop(Op op) const ENTT_NOEXCEPT
    Iterates all the properties assigned to a meta type.
    Definition: meta.hpp:1714
    -
    const Type & cast() const ENTT_NOEXCEPT
    Tries to cast an instance to a given type.
    Definition: meta.hpp:570
    -
    meta_type resolve() ENTT_NOEXCEPT
    Returns the meta type associated with a given type.
    Definition: factory.hpp:826
    -
    meta_prop(const internal::meta_prop_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:776
    -
    std::enable_if_t< std::is_invocable_v< Op, meta_data >, void > data(Op op) const ENTT_NOEXCEPT
    Iterates all the meta data of a meta type.
    Definition: meta.hpp:1608
    -
    std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop(Op op) const ENTT_NOEXCEPT
    Iterates all the properties assigned to a meta data.
    Definition: meta.hpp:1183
    -
    meta_type type() const ENTT_NOEXCEPT
    Returns the meta type of the underlying object.
    Definition: meta.hpp:1806
    -
    bool invoke(meta_handle handle) const
    Destroys an instance of the underlying type.
    Definition: meta.hpp:1042
    -
    bool is_const() const ENTT_NOEXCEPT
    Indicates whether a given meta data is constant or not.
    Definition: meta.hpp:1089
    -
    std::enable_if_t< std::is_invocable_v< Op, meta_func >, void > func(Op op) const ENTT_NOEXCEPT
    Iterates all the meta functions of a meta type.
    Definition: meta.hpp:1640
    -
    void emplace(Args &&... args)
    Replaces the contained object by initializing a new instance directly.
    Definition: meta.hpp:634
    -
    constexpr bool operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT
    Compares two hashed strings.
    -
    meta_prop prop(meta_any key) const ENTT_NOEXCEPT
    Returns the property associated with a given key.
    Definition: meta.hpp:1728
    -
    size_type extent() const ENTT_NOEXCEPT
    If a given meta type refers to an array type, provides the number of elements of the array...
    Definition: meta.hpp:1488
    -
    bool is_floating_point() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a floating-point type or not.
    Definition: meta.hpp:1407
    -
    Type & cast() ENTT_NOEXCEPT
    Tries to cast an instance to a given type.
    Definition: meta.hpp:578
    -
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1836
    -
    const void * data() const ENTT_NOEXCEPT
    Returns an opaque pointer to the contained instance.
    Definition: meta.hpp:517
    -
    void * data() ENTT_NOEXCEPT
    Returns an opaque pointer to the contained instance.
    Definition: meta.hpp:741
    -
    meta_handle() ENTT_NOEXCEPT
    Default constructor.
    Definition: meta.hpp:707
    -
    meta_type remove_extent() const ENTT_NOEXCEPT
    Provides the meta type for which the array is defined.
    Definition: meta.hpp:1506
    -
    meta_data data(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT
    Returns the meta data associated with a given identifier.
    Definition: meta.hpp:1622
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    meta_any(Type &&type)
    Constructs a meta any from a given value.
    Definition: meta.hpp:436
    -
    meta_type type() const ENTT_NOEXCEPT
    Returns the meta type of the underlying object.
    Definition: meta.hpp:1786
    -
    std::enable_if_t< std::is_invocable_v< Op, meta_base >, void > base(Op op) const ENTT_NOEXCEPT
    Iterates all the meta base of a meta type.
    Definition: meta.hpp:1520
    -
    bool is_integral() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to an integral type or not.
    Definition: meta.hpp:1397
    -
    meta_type arg(size_type index) const ENTT_NOEXCEPT
    Returns the meta type of the i-th argument of a meta function.
    Definition: meta.hpp:1846
    -
    meta_any convert(const void *instance) const ENTT_NOEXCEPT
    Converts an instance to a given type.
    Definition: meta.hpp:897
    -
    meta_any() ENTT_NOEXCEPT
    Default constructor.
    Definition: meta.hpp:379
    -
    void * data() ENTT_NOEXCEPT
    Returns an opaque pointer to the contained instance.
    Definition: meta.hpp:522
    -
    bool destroy(meta_handle handle) const
    Destroys an instance of the underlying type.
    Definition: meta.hpp:1699
    -
    bool is_member_object_pointer() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a pointer to data member or not.
    Definition: meta.hpp:1468
    -
    size_type size() const ENTT_NOEXCEPT
    Returns the number of arguments accepted by a meta function.
    Definition: meta.hpp:1244
    -
    bool operator==(const meta_conv &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:910
    -
    meta_any invoke(Args &&... args) const
    Creates an instance of the underlying type, if possible.
    Definition: meta.hpp:965
    -
    meta_func(const internal::meta_func_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:1228
    -
    Basic storage implementation.
    Definition: storage.hpp:697
    -
    Opaque container for meta destructors.
    Definition: meta.hpp:1023
    -
    Opaque container for meta data.
    Definition: meta.hpp:1071
    -
    bool operator==(const meta_ctor &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:1007
    -
    size_type size() const ENTT_NOEXCEPT
    Returns the number of arguments accepted by a meta constructor.
    Definition: meta.hpp:942
    -
    std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop(Op op) const ENTT_NOEXCEPT
    Iterates all the properties assigned to a meta function.
    Definition: meta.hpp:1316
    -
    Opaque container for meta constructors.
    Definition: meta.hpp:926
    -
    bool operator==(const meta_base &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:864
    -
    const void * data() const ENTT_NOEXCEPT
    Returns an opaque pointer to the contained instance.
    Definition: meta.hpp:736
    -
    meta_prop prop(meta_any key) const ENTT_NOEXCEPT
    Returns the property associated with a given key.
    Definition: meta.hpp:1325
    -
    bool is_union() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to an union or not.
    Definition: meta.hpp:1432
    -
    meta_any(std::in_place_type_t< Type >, [[maybe_unused]] Args &&... args)
    Constructs a meta any by directly initializing the new object.
    Definition: meta.hpp:395
    -
    meta_ctor ctor() const ENTT_NOEXCEPT
    Returns the meta constructor that accepts a given list of types of arguments.
    Definition: meta.hpp:1585
    -
    meta_type arg(size_type index) const ENTT_NOEXCEPT
    Returns the meta type of the i-th argument of a meta constructor.
    Definition: meta.hpp:1816
    -
    meta_any(std::reference_wrapper< Type > type)
    Constructs a meta any that holds an unmanaged object.
    Definition: meta.hpp:417
    -
    meta_any value() const ENTT_NOEXCEPT
    Returns the stored value.
    Definition: meta.hpp:792
    -
    meta_any construct(Args &&... args) const
    Creates an instance of the underlying type, if possible.
    Definition: meta.hpp:1672
    -
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1821
    -
    Opaque container for meta properties of any type.
    Definition: meta.hpp:771
    -
    bool is_array() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to an array type or not.
    Definition: meta.hpp:1416
    -
    bool is_pointer() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a pointer or not.
    Definition: meta.hpp:1448
    -
    friend void swap(meta_any &lhs, meta_any &rhs) ENTT_NOEXCEPT
    Swaps two meta any objects.
    Definition: meta.hpp:661
    -
    meta_type remove_pointer() const ENTT_NOEXCEPT
    Provides the meta type for which the pointer is defined.
    Definition: meta.hpp:1497
    -
    meta_conv(const internal::meta_conv_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:882
    -
    Opaque container for meta types.
    Definition: meta.hpp:1356
    -
    meta_any invoke(meta_handle handle, Args &&... args) const
    Invokes the underlying function, if possible.
    Definition: meta.hpp:1297
    -
    meta_dtor(const internal::meta_dtor_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:1025
    -
    typename internal::meta_type_node::size_type size_type
    Unsigned integer type.
    Definition: meta.hpp:1369
    -
    static void bind(meta_ctx other) ENTT_NOEXCEPT
    Binds the meta system to the given context.
    Definition: meta.hpp:1758
    -
    meta_type ret() const ENTT_NOEXCEPT
    Returns the meta type of the return type of a meta function.
    Definition: meta.hpp:1841
    -
    meta_any key() const ENTT_NOEXCEPT
    Returns the stored key.
    Definition: meta.hpp:784
    -
    Opaque container for meta functions.
    Definition: meta.hpp:1223
    -
    const Type * try_cast() const ENTT_NOEXCEPT
    Tries to cast an instance to a given type.
    Definition: meta.hpp:532
    -
    meta_type type() const ENTT_NOEXCEPT
    Returns the meta type of the underlying object.
    Definition: meta.hpp:1796
    -
    bool operator==(const meta_func &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:1340
    -
    meta_any convert() const
    Tries to convert an instance to a given type and returns it.
    Definition: meta.hpp:589
    -
    void ctor(Op op) const ENTT_NOEXCEPT
    Iterates all the meta constructors of a meta type.
    Definition: meta.hpp:1575
    -
    meta_type(const internal::meta_type_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:1372
    -
    meta_any & operator=(meta_any &&other) ENTT_NOEXCEPT
    Move assignment operator.
    Definition: meta.hpp:501
    -
    std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop(Op op) const ENTT_NOEXCEPT
    Iterates all the properties assigned to a meta constructor.
    Definition: meta.hpp:983
    -
    bool operator==(const meta_data &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:1207
    -
    ~meta_any()
    Frees the internal storage, whatever it means.
    Definition: meta.hpp:470
    -
    meta_type type() const ENTT_NOEXCEPT
    Returns the meta type of the underlying object.
    Definition: meta.hpp:1831
    -
    Opaque container for a meta context.
    Definition: meta.hpp:1753
    -
    meta_base(const internal::meta_base_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:833
    -
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1801
    -
    void conv(Op op) const ENTT_NOEXCEPT
    Iterates all the meta conversion functions of a meta type.
    Definition: meta.hpp:1548
    -
    Opaque container for meta base classes.
    Definition: meta.hpp:831
    -
    typename internal::meta_func_node::size_type size_type
    Unsigned integer type.
    Definition: meta.hpp:1225
    -
    meta_handle(meta_any &any) ENTT_NOEXCEPT
    Constructs a meta handle from a meta any object.
    Definition: meta.hpp:716
    -
    meta_any & operator=(const meta_any &other)
    Copy assignment operator.
    Definition: meta.hpp:492
    -
    Opaque container for meta conversion functions.
    Definition: meta.hpp:880
    -
    constexpr get_t< Type... > get
    Variable template for lists of observed components.
    Definition: utility.hpp:40
    -
    ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT
    Returns the identifier assigned to a given meta object.
    Definition: meta.hpp:1078
    -
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1811
    -
    meta_dtor dtor() const ENTT_NOEXCEPT
    Returns the meta destructor associated with a given type.
    Definition: meta.hpp:1593
    -
    meta_prop prop(meta_any key) const ENTT_NOEXCEPT
    Returns the property associated with a given key.
    Definition: meta.hpp:1192
    -
    meta_prop prop(meta_any key) const ENTT_NOEXCEPT
    Returns the property associated with a given key.
    Definition: meta.hpp:992
    -
    bool convert()
    Tries to convert an instance to a given type.
    Definition: meta.hpp:613
    -
    bool is_function_pointer() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a function pointer or not.
    Definition: meta.hpp:1458
    -
    bool is_void() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to void or not.
    Definition: meta.hpp:1388
    -
    meta_type type() const ENTT_NOEXCEPT
    Returns the meta type of the underlying object.
    Definition: meta.hpp:1781
    -
    meta_func func(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT
    Returns the meta function associated with a given identifier.
    Definition: meta.hpp:1654
    -
    meta_conv conv() const ENTT_NOEXCEPT
    Returns the meta conversion function associated with a given type.
    Definition: meta.hpp:1563
    -
    bool is_const() const ENTT_NOEXCEPT
    Indicates whether a given meta function is constant or not.
    Definition: meta.hpp:1252
    -
    typename internal::meta_ctor_node::size_type size_type
    Unsigned integer type.
    Definition: meta.hpp:928
    -
    meta_any(meta_any &&other) ENTT_NOEXCEPT
    Move constructor.
    Definition: meta.hpp:463
    -
    Type * try_cast() ENTT_NOEXCEPT
    Tries to cast an instance to a given type.
    Definition: meta.hpp:551
    -
    bool operator==(const meta_prop &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:810
    -
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1826
    -
    bool is_class() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a class or not.
    Definition: meta.hpp:1440
    -
    meta_data(const internal::meta_data_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:1073
    -
    bool operator==(const meta_dtor &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:1055
    -
    bool is_static() const ENTT_NOEXCEPT
    Indicates whether a given meta function is static or not.
    Definition: meta.hpp:1264
    -
    bool is_member_function_pointer() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a pointer to member function or not.
    Definition: meta.hpp:1478
    -
    meta_ctor(const internal::meta_ctor_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:931
    -
    meta_any & operator=(Type &&type)
    Assignment operator.
    Definition: meta.hpp:483
    +
    1 #ifndef ENTT_META_META_HPP
    +
    2 #define ENTT_META_META_HPP
    +
    3 
    +
    4 
    +
    5 #include <array>
    +
    6 #include <memory>
    +
    7 #include <cstddef>
    +
    8 #include <utility>
    +
    9 #include <type_traits>
    +
    10 #include "../config/config.h"
    +
    11 #include "../core/type_traits.hpp"
    +
    12 #include "../core/utility.hpp"
    +
    13 
    +
    14 
    +
    15 namespace entt {
    +
    16 
    +
    17 
    +
    18 class meta_any;
    +
    19 class meta_handle;
    +
    20 class meta_type;
    +
    21 
    +
    22 
    +
    29 namespace internal {
    +
    30 
    +
    31 
    +
    32 struct meta_type_node;
    +
    33 
    +
    34 
    +
    35 struct meta_prop_node {
    +
    36  meta_prop_node * next;
    +
    37  meta_any(* const key)();
    +
    38  meta_any(* const value)();
    +
    39 };
    +
    40 
    +
    41 
    +
    42 struct meta_base_node {
    +
    43  meta_type_node * const parent;
    +
    44  meta_base_node * next;
    +
    45  meta_type_node *(* const type)() ENTT_NOEXCEPT;
    +
    46  void *(* const cast)(void *) ENTT_NOEXCEPT;
    +
    47 };
    +
    48 
    +
    49 
    +
    50 struct meta_conv_node {
    +
    51  meta_type_node * const parent;
    +
    52  meta_conv_node * next;
    +
    53  meta_type_node *(* const type)() ENTT_NOEXCEPT;
    +
    54  meta_any(* const conv)(const void *);
    +
    55 };
    +
    56 
    +
    57 
    +
    58 struct meta_ctor_node {
    +
    59  using size_type = std::size_t;
    +
    60  meta_type_node * const parent;
    +
    61  meta_ctor_node * next;
    +
    62  meta_prop_node * prop;
    +
    63  const size_type size;
    +
    64  meta_type_node *(* const arg)(size_type) ENTT_NOEXCEPT;
    +
    65  meta_any(* const invoke)(meta_any * const);
    +
    66 };
    +
    67 
    +
    68 
    +
    69 struct meta_dtor_node {
    +
    70  meta_type_node * const parent;
    +
    71  bool(* const invoke)(meta_handle);
    +
    72 };
    +
    73 
    +
    74 
    +
    75 struct meta_data_node {
    +
    76  ENTT_ID_TYPE identifier;
    +
    77  meta_type_node * const parent;
    +
    78  meta_data_node * next;
    +
    79  meta_prop_node * prop;
    +
    80  const bool is_const;
    +
    81  const bool is_static;
    +
    82  meta_type_node *(* const type)() ENTT_NOEXCEPT;
    +
    83  bool(* const set)(meta_handle, meta_any, meta_any);
    +
    84  meta_any(* const get)(meta_handle, meta_any);
    +
    85 };
    +
    86 
    +
    87 
    +
    88 struct meta_func_node {
    +
    89  using size_type = std::size_t;
    +
    90  ENTT_ID_TYPE identifier;
    +
    91  meta_type_node * const parent;
    +
    92  meta_func_node * next;
    +
    93  meta_prop_node * prop;
    +
    94  const size_type size;
    +
    95  const bool is_const;
    +
    96  const bool is_static;
    +
    97  meta_type_node *(* const ret)() ENTT_NOEXCEPT;
    +
    98  meta_type_node *(* const arg)(size_type) ENTT_NOEXCEPT;
    +
    99  meta_any(* const invoke)(meta_handle, meta_any *);
    +
    100 };
    +
    101 
    +
    102 
    +
    103 struct meta_type_node {
    +
    104  using size_type = std::size_t;
    +
    105  ENTT_ID_TYPE identifier;
    +
    106  meta_type_node * next;
    +
    107  meta_prop_node * prop;
    +
    108  const bool is_void;
    +
    109  const bool is_integral;
    +
    110  const bool is_floating_point;
    +
    111  const bool is_array;
    +
    112  const bool is_enum;
    +
    113  const bool is_union;
    +
    114  const bool is_class;
    +
    115  const bool is_pointer;
    +
    116  const bool is_function_pointer;
    +
    117  const bool is_member_object_pointer;
    +
    118  const bool is_member_function_pointer;
    +
    119  const size_type extent;
    +
    120  bool(* const compare)(const void *, const void *);
    +
    121  meta_type_node *(* const remove_pointer)() ENTT_NOEXCEPT;
    +
    122  meta_type_node *(* const remove_extent)() ENTT_NOEXCEPT;
    +
    123  meta_base_node *base{nullptr};
    +
    124  meta_conv_node *conv{nullptr};
    +
    125  meta_ctor_node *ctor{nullptr};
    +
    126  meta_dtor_node *dtor{nullptr};
    +
    127  meta_data_node *data{nullptr};
    +
    128  meta_func_node *func{nullptr};
    +
    129 };
    +
    130 
    +
    131 
    +
    132 template<typename Type, typename Op, typename Node>
    +
    133 void iterate(Op op, Node *curr) ENTT_NOEXCEPT {
    +
    134  while(curr) {
    +
    135  op(Type{curr});
    +
    136  curr = curr->next;
    +
    137  }
    +
    138 }
    +
    139 
    +
    140 
    +
    141 template<auto Member, typename Type, typename Op>
    +
    142 void iterate(Op op, const meta_type_node *node) ENTT_NOEXCEPT {
    +
    143  if(node) {
    +
    144  auto *curr = node->base;
    +
    145  iterate<Type>(op, node->*Member);
    +
    146 
    +
    147  while(curr) {
    +
    148  iterate<Member, Type>(op, curr->type());
    +
    149  curr = curr->next;
    +
    150  }
    +
    151  }
    +
    152 }
    +
    153 
    +
    154 
    +
    155 template<typename Op, typename Node>
    +
    156 auto find_if(Op op, Node *curr) ENTT_NOEXCEPT {
    +
    157  while(curr && !op(curr)) {
    +
    158  curr = curr->next;
    +
    159  }
    +
    160 
    +
    161  return curr;
    +
    162 }
    +
    163 
    +
    164 
    +
    165 template<auto Member, typename Op>
    +
    166 auto find_if(Op op, const meta_type_node *node) ENTT_NOEXCEPT
    +
    167 -> decltype(find_if(op, node->*Member)) {
    +
    168  decltype(find_if(op, node->*Member)) ret = nullptr;
    +
    169 
    +
    170  if(node) {
    +
    171  ret = find_if(op, node->*Member);
    +
    172  auto *curr = node->base;
    +
    173 
    +
    174  while(curr && !ret) {
    +
    175  ret = find_if<Member>(op, curr->type());
    +
    176  curr = curr->next;
    +
    177  }
    +
    178  }
    +
    179 
    +
    180  return ret;
    +
    181 }
    +
    182 
    +
    183 
    +
    184 template<typename Type>
    +
    185 static bool compare(const void *lhs, const void *rhs) {
    +
    186  if constexpr(!std::is_function_v<Type> && is_equality_comparable_v<Type>) {
    +
    187  return *static_cast<const Type *>(lhs) == *static_cast<const Type *>(rhs);
    +
    188  } else {
    +
    189  return lhs == rhs;
    +
    190  }
    +
    191 }
    +
    192 
    +
    193 
    +
    194 template<typename...>
    +
    195 struct meta_node;
    +
    196 
    +
    197 
    +
    198 template<>
    +
    199 struct meta_node<> {
    +
    200  inline static meta_type_node *local = nullptr;
    +
    201  inline static meta_type_node **global = &local;
    +
    202 };
    +
    203 
    +
    204 
    +
    205 template<typename Type>
    +
    206 struct meta_node<Type> {
    +
    207  static_assert(std::is_same_v<Type, std::remove_cv_t<std::remove_reference_t<Type>>>);
    +
    208 
    +
    209  static void reset() ENTT_NOEXCEPT {
    +
    210  auto * const node = resolve();
    +
    211  auto **it = meta_node<>::global;
    +
    212 
    +
    213  while(*it && *it != node) {
    +
    214  it = &(*it)->next;
    +
    215  }
    +
    216 
    +
    217  if(*it) {
    +
    218  *it = (*it)->next;
    +
    219  }
    +
    220 
    +
    221  const auto unregister_all = y_combinator{
    +
    222  [](auto &&self, auto **curr, auto... member) {
    +
    223  while(*curr) {
    +
    224  auto *prev = *curr;
    +
    225  (self(&(prev->*member)), ...);
    +
    226  *curr = prev->next;
    +
    227  prev->next = nullptr;
    +
    228  }
    +
    229  }
    +
    230  };
    +
    231 
    +
    232  unregister_all(&node->prop);
    +
    233  unregister_all(&node->base);
    +
    234  unregister_all(&node->conv);
    +
    235  unregister_all(&node->ctor, &internal::meta_ctor_node::prop);
    +
    236  unregister_all(&node->data, &internal::meta_data_node::prop);
    +
    237  unregister_all(&node->func, &internal::meta_func_node::prop);
    +
    238 
    +
    239  node->identifier = {};
    +
    240  node->dtor = nullptr;
    +
    241  node->next = nullptr;
    +
    242  }
    +
    243 
    +
    244  static meta_type_node * resolve() ENTT_NOEXCEPT {
    +
    245  static meta_type_node node{
    +
    246  {},
    +
    247  nullptr,
    +
    248  nullptr,
    +
    249  std::is_void_v<Type>,
    +
    250  std::is_integral_v<Type>,
    +
    251  std::is_floating_point_v<Type>,
    +
    252  std::is_array_v<Type>,
    +
    253  std::is_enum_v<Type>,
    +
    254  std::is_union_v<Type>,
    +
    255  std::is_class_v<Type>,
    +
    256  std::is_pointer_v<Type>,
    +
    257  std::is_pointer_v<Type> && std::is_function_v<std::remove_pointer_t<Type>>,
    +
    258  std::is_member_object_pointer_v<Type>,
    +
    259  std::is_member_function_pointer_v<Type>,
    +
    260  std::extent_v<Type>,
    +
    261  &compare<Type>, // workaround for an issue with VS2017
    +
    262  []() ENTT_NOEXCEPT -> meta_type_node * {
    +
    263  return meta_node<std::remove_const_t<std::remove_pointer_t<Type>>>::resolve();
    +
    264  },
    +
    265  []() ENTT_NOEXCEPT -> meta_type_node * {
    +
    266  return meta_node<std::remove_const_t<std::remove_extent_t<Type>>>::resolve();
    +
    267  }
    +
    268  };
    +
    269 
    +
    270  if constexpr(is_named_type_v<Type>) {
    +
    271  auto *candidate = internal::find_if([](auto *curr) {
    +
    272  return curr->identifier == named_type_traits_v<Type>;
    +
    273  }, *meta_node<>::global);
    +
    274 
    +
    275  return candidate ? candidate : &node;
    +
    276  } else {
    +
    277  return &node;
    +
    278  }
    +
    279  }
    +
    280 };
    +
    281 
    +
    282 
    +
    283 template<typename... Type>
    +
    284 struct meta_info: meta_node<std::remove_cv_t<std::remove_reference_t<Type>>...> {};
    +
    285 
    +
    286 
    +
    287 }
    +
    288 
    +
    289 
    +
    311 class meta_any {
    +
    313  friend class meta_handle;
    +
    314 
    +
    315  using storage_type = std::aligned_storage_t<sizeof(void *), alignof(void *)>;
    +
    316  using copy_fn_type = void *(storage_type &, const void *);
    +
    317  using destroy_fn_type = void(void *);
    +
    318  using steal_fn_type = void *(storage_type &, void *, destroy_fn_type *);
    +
    319 
    +
    320  template<typename Type>
    +
    321  static Type * release(Type *instance) {
    +
    322  const auto * const node = internal::meta_info<Type>::resolve();
    +
    323  [[maybe_unused]] const bool destroyed = (!node->dtor || node->dtor->invoke(*instance));
    +
    324  ENTT_ASSERT(destroyed);
    +
    325  return instance;
    +
    326  }
    +
    327 
    +
    328  template<typename Type, typename = std::void_t<>>
    +
    329  struct type_traits {
    +
    330  template<typename... Args>
    +
    331  static void * instance(storage_type &storage, Args &&... args) {
    +
    332  auto instance = std::make_unique<Type>(std::forward<Args>(args)...);
    +
    333  new (&storage) Type *{instance.get()};
    +
    334  return instance.release();
    +
    335  }
    +
    336 
    +
    337  static void destroy(void *instance) {
    +
    338  delete release<Type>(static_cast<Type *>(instance));
    +
    339  }
    +
    340 
    +
    341  static void * copy(storage_type &storage, const void *other) {
    +
    342  auto instance = std::make_unique<Type>(*static_cast<const Type *>(other));
    +
    343  new (&storage) Type *{instance.get()};
    +
    344  return instance.release();
    +
    345  }
    +
    346 
    +
    347  static void * steal(storage_type &to, void *from, destroy_fn_type *) {
    +
    348  auto * const instance = static_cast<Type *>(from);
    +
    349  new (&to) Type *{instance};
    +
    350  return instance;
    +
    351  }
    +
    352  };
    +
    353 
    +
    354  template<typename Type>
    +
    355  struct type_traits<Type, std::enable_if_t<sizeof(Type) <= sizeof(void *) && std::is_nothrow_move_constructible_v<Type>>> {
    +
    356  template<typename... Args>
    +
    357  static void * instance(storage_type &storage, Args &&... args) {
    +
    358  return new (&storage) Type{std::forward<Args>(args)...};
    +
    359  }
    +
    360 
    +
    361  static void destroy(void *instance) {
    +
    362  release<Type>(static_cast<Type *>(instance))->~Type();
    +
    363  }
    +
    364 
    +
    365  static void * copy(storage_type &storage, const void *instance) {
    +
    366  return new (&storage) Type{*static_cast<const Type *>(instance)};
    +
    367  }
    +
    368 
    +
    369  static void * steal(storage_type &to, void *from, destroy_fn_type *destroy_fn) {
    +
    370  void * const instance = new (&to) Type{std::move(*static_cast<Type *>(from))};
    +
    371  destroy_fn(from);
    +
    372  return instance;
    +
    373  }
    +
    374  };
    +
    375 
    +
    376 public:
    +
    378  meta_any() ENTT_NOEXCEPT
    +
    379  : storage{},
    +
    380  instance{nullptr},
    +
    381  node{nullptr},
    +
    382  destroy_fn{nullptr},
    +
    383  copy_fn{nullptr},
    +
    384  steal_fn{nullptr}
    +
    385  {}
    +
    386 
    +
    393  template<typename Type, typename... Args>
    +
    394  explicit meta_any(std::in_place_type_t<Type>, [[maybe_unused]] Args &&... args)
    +
    395  : meta_any{}
    +
    396  {
    +
    397  node = internal::meta_info<Type>::resolve();
    +
    398 
    +
    399  if constexpr(!std::is_void_v<Type>) {
    +
    400  using traits_type = type_traits<std::remove_cv_t<std::remove_reference_t<Type>>>;
    +
    401  static_assert(std::is_copy_constructible_v<Type>);
    +
    402 
    +
    403  instance = traits_type::instance(storage, std::forward<Args>(args)...);
    +
    404  destroy_fn = &traits_type::destroy;
    +
    405  copy_fn = &traits_type::copy;
    +
    406  steal_fn = &traits_type::steal;
    +
    407  }
    +
    408  }
    +
    409 
    +
    415  template<typename Type>
    +
    416  explicit meta_any(std::reference_wrapper<Type> type)
    +
    417  : meta_any{}
    +
    418  {
    +
    419  node = internal::meta_info<Type>::resolve();
    +
    420  instance = &type.get();
    +
    421  }
    +
    422 
    +
    427  inline meta_any(meta_handle handle) ENTT_NOEXCEPT;
    +
    428 
    +
    434  template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::remove_cv_t<std::remove_reference_t<Type>>, meta_any>>>
    +
    435  meta_any(Type &&type)
    +
    436  : meta_any{std::in_place_type<std::remove_cv_t<std::remove_reference_t<Type>>>, std::forward<Type>(type)}
    +
    437  {}
    +
    438 
    +
    443  meta_any(const meta_any &other)
    +
    444  : meta_any{}
    +
    445  {
    +
    446  node = other.node;
    +
    447  instance = other.copy_fn ? other.copy_fn(storage, other.instance) : other.instance;
    +
    448  destroy_fn = other.destroy_fn;
    +
    449  copy_fn = other.copy_fn;
    +
    450  steal_fn = other.steal_fn;
    +
    451  }
    +
    452 
    +
    462  meta_any(meta_any &&other) ENTT_NOEXCEPT
    +
    463  : meta_any{}
    +
    464  {
    +
    465  swap(*this, other);
    +
    466  }
    +
    467 
    + +
    470  if(destroy_fn) {
    +
    471  destroy_fn(instance);
    +
    472  }
    +
    473  }
    +
    474 
    +
    481  template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::remove_cv_t<std::remove_reference_t<Type>>, meta_any>>>
    +
    482  meta_any & operator=(Type &&type) {
    +
    483  return (*this = meta_any{std::forward<Type>(type)});
    +
    484  }
    +
    485 
    +
    491  meta_any & operator=(const meta_any &other) {
    +
    492  return (*this = meta_any{other});
    +
    493  }
    +
    494 
    +
    500  meta_any & operator=(meta_any &&other) ENTT_NOEXCEPT {
    +
    501  meta_any any{std::move(other)};
    +
    502  swap(any, *this);
    +
    503  return *this;
    +
    504  }
    +
    505 
    +
    510  inline meta_type type() const ENTT_NOEXCEPT;
    +
    511 
    +
    516  const void * data() const ENTT_NOEXCEPT {
    +
    517  return instance;
    +
    518  }
    +
    519 
    +
    521  void * data() ENTT_NOEXCEPT {
    +
    522  return const_cast<void *>(std::as_const(*this).data());
    +
    523  }
    +
    524 
    +
    530  template<typename Type>
    +
    531  const Type * try_cast() const ENTT_NOEXCEPT {
    +
    532  const auto * const type = internal::meta_info<Type>::resolve();
    +
    533  void *ret = nullptr;
    +
    534 
    +
    535  if(node == type) {
    +
    536  ret = instance;
    +
    537  } else {
    +
    538  const auto *base = internal::find_if<&internal::meta_type_node::base>([type](auto *candidate) {
    +
    539  return candidate->type() == type;
    +
    540  }, node);
    +
    541 
    +
    542  ret = base ? base->cast(instance) : nullptr;
    +
    543  }
    +
    544 
    +
    545  return static_cast<const Type *>(ret);
    +
    546  }
    +
    547 
    +
    549  template<typename Type>
    +
    550  Type * try_cast() ENTT_NOEXCEPT {
    +
    551  return const_cast<Type *>(std::as_const(*this).try_cast<Type>());
    +
    552  }
    +
    553 
    +
    568  template<typename Type>
    +
    569  const Type & cast() const ENTT_NOEXCEPT {
    +
    570  auto * const actual = try_cast<Type>();
    +
    571  ENTT_ASSERT(actual);
    +
    572  return *actual;
    +
    573  }
    +
    574 
    +
    576  template<typename Type>
    +
    577  Type & cast() ENTT_NOEXCEPT {
    +
    578  return const_cast<Type &>(std::as_const(*this).cast<Type>());
    +
    579  }
    +
    580 
    +
    587  template<typename Type>
    +
    588  meta_any convert() const {
    +
    589  meta_any any{};
    +
    590 
    +
    591  if(const auto * const type = internal::meta_info<Type>::resolve(); node == type) {
    +
    592  any = *static_cast<const Type *>(instance);
    +
    593  } else {
    +
    594  const auto * const conv = internal::find_if<&internal::meta_type_node::conv>([type](auto *other) {
    +
    595  return other->type() == type;
    +
    596  }, node);
    +
    597 
    +
    598  if(conv) {
    +
    599  any = conv->conv(instance);
    +
    600  }
    +
    601  }
    +
    602 
    +
    603  return any;
    +
    604  }
    +
    605 
    +
    611  template<typename Type>
    +
    612  bool convert() {
    +
    613  bool valid = (node == internal::meta_info<Type>::resolve());
    +
    614 
    +
    615  if(!valid) {
    +
    616  if(auto any = std::as_const(*this).convert<Type>(); any) {
    +
    617  swap(any, *this);
    +
    618  valid = true;
    +
    619  }
    +
    620  }
    +
    621 
    +
    622  return valid;
    +
    623  }
    +
    624 
    +
    632  template<typename Type, typename... Args>
    +
    633  void emplace(Args &&... args) {
    +
    634  *this = meta_any{std::in_place_type_t<Type>{}, std::forward<Args>(args)...};
    +
    635  }
    +
    636 
    +
    641  explicit operator bool() const ENTT_NOEXCEPT {
    +
    642  return node;
    +
    643  }
    +
    644 
    +
    651  bool operator==(const meta_any &other) const ENTT_NOEXCEPT {
    +
    652  return node == other.node && (!node || node->compare(instance, other.instance));
    +
    653  }
    +
    654 
    +
    660  friend void swap(meta_any &lhs, meta_any &rhs) ENTT_NOEXCEPT {
    +
    661  if(lhs.steal_fn && rhs.steal_fn) {
    +
    662  storage_type buffer;
    +
    663  auto * const temp = lhs.steal_fn(buffer, lhs.instance, lhs.destroy_fn);
    +
    664  lhs.instance = rhs.steal_fn(lhs.storage, rhs.instance, rhs.destroy_fn);
    +
    665  rhs.instance = lhs.steal_fn(rhs.storage, temp, lhs.destroy_fn);
    +
    666  } else if(lhs.steal_fn) {
    +
    667  lhs.instance = lhs.steal_fn(rhs.storage, lhs.instance, lhs.destroy_fn);
    +
    668  std::swap(rhs.instance, lhs.instance);
    +
    669  } else if(rhs.steal_fn) {
    +
    670  rhs.instance = rhs.steal_fn(lhs.storage, rhs.instance, rhs.destroy_fn);
    +
    671  std::swap(rhs.instance, lhs.instance);
    +
    672  } else {
    +
    673  std::swap(lhs.instance, rhs.instance);
    +
    674  }
    +
    675 
    +
    676  std::swap(lhs.node, rhs.node);
    +
    677  std::swap(lhs.destroy_fn, rhs.destroy_fn);
    +
    678  std::swap(lhs.copy_fn, rhs.copy_fn);
    +
    679  std::swap(lhs.steal_fn, rhs.steal_fn);
    +
    680  }
    +
    681 
    +
    682 private:
    +
    683  storage_type storage;
    +
    684  void *instance;
    +
    685  const internal::meta_type_node *node;
    +
    686  destroy_fn_type *destroy_fn;
    +
    687  copy_fn_type *copy_fn;
    +
    688  steal_fn_type *steal_fn;
    +
    689 };
    +
    690 
    +
    691 
    +
    700 class meta_handle {
    +
    702  friend class meta_any;
    +
    703 
    +
    704 public:
    +
    706  meta_handle() ENTT_NOEXCEPT
    +
    707  : node{nullptr},
    +
    708  instance{nullptr}
    +
    709  {}
    +
    710 
    +
    715  meta_handle(meta_any &any) ENTT_NOEXCEPT
    +
    716  : node{any.node},
    +
    717  instance{any.instance}
    +
    718  {}
    +
    719 
    +
    725  template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::remove_cv_t<std::remove_reference_t<Type>>, meta_handle>>>
    +
    726  meta_handle(Type &obj) ENTT_NOEXCEPT
    +
    727  : node{internal::meta_info<Type>::resolve()},
    +
    728  instance{&obj}
    +
    729  {}
    +
    730 
    +
    732  inline meta_type type() const ENTT_NOEXCEPT;
    +
    733 
    +
    735  const void * data() const ENTT_NOEXCEPT {
    +
    736  return instance;
    +
    737  }
    +
    738 
    +
    740  void * data() ENTT_NOEXCEPT {
    +
    741  return const_cast<void *>(std::as_const(*this).data());
    +
    742  }
    +
    743 
    +
    748  explicit operator bool() const ENTT_NOEXCEPT {
    +
    749  return instance;
    +
    750  }
    +
    751 
    +
    752 private:
    +
    753  const internal::meta_type_node *node;
    +
    754  void *instance;
    +
    755 };
    +
    756 
    +
    757 
    +
    764 inline bool operator!=(const meta_any &lhs, const meta_any &rhs) ENTT_NOEXCEPT {
    +
    765  return !(lhs == rhs);
    +
    766 }
    +
    767 
    +
    768 
    +
    770 struct meta_prop {
    +
    775  meta_prop(const internal::meta_prop_node *curr = nullptr) ENTT_NOEXCEPT
    +
    776  : node{curr}
    +
    777  {}
    +
    778 
    +
    783  meta_any key() const ENTT_NOEXCEPT {
    +
    784  return node->key();
    +
    785  }
    +
    786 
    +
    791  meta_any value() const ENTT_NOEXCEPT {
    +
    792  return node->value();
    +
    793  }
    +
    794 
    +
    799  explicit operator bool() const ENTT_NOEXCEPT {
    +
    800  return node;
    +
    801  }
    +
    802 
    +
    809  bool operator==(const meta_prop &other) const ENTT_NOEXCEPT {
    +
    810  return node == other.node;
    +
    811  }
    +
    812 
    +
    813 private:
    +
    814  const internal::meta_prop_node *node;
    +
    815 };
    +
    816 
    +
    817 
    +
    824 inline bool operator!=(const meta_prop &lhs, const meta_prop &rhs) ENTT_NOEXCEPT {
    +
    825  return !(lhs == rhs);
    +
    826 }
    +
    827 
    +
    828 
    +
    830 struct meta_base {
    +
    832  meta_base(const internal::meta_base_node *curr = nullptr) ENTT_NOEXCEPT
    +
    833  : node{curr}
    +
    834  {}
    +
    835 
    +
    840  inline meta_type parent() const ENTT_NOEXCEPT;
    +
    841 
    +
    843  inline meta_type type() const ENTT_NOEXCEPT;
    +
    844 
    +
    850  void * cast(void *instance) const ENTT_NOEXCEPT {
    +
    851  return node->cast(instance);
    +
    852  }
    +
    853 
    +
    858  explicit operator bool() const ENTT_NOEXCEPT {
    +
    859  return node;
    +
    860  }
    +
    861 
    +
    863  bool operator==(const meta_base &other) const ENTT_NOEXCEPT {
    +
    864  return node == other.node;
    +
    865  }
    +
    866 
    +
    867 private:
    +
    868  const internal::meta_base_node *node;
    +
    869 };
    +
    870 
    +
    871 
    +
    873 inline bool operator!=(const meta_base &lhs, const meta_base &rhs) ENTT_NOEXCEPT {
    +
    874  return !(lhs == rhs);
    +
    875 }
    +
    876 
    +
    877 
    +
    879 struct meta_conv {
    +
    881  meta_conv(const internal::meta_conv_node *curr = nullptr) ENTT_NOEXCEPT
    +
    882  : node{curr}
    +
    883  {}
    +
    884 
    +
    886  inline meta_type parent() const ENTT_NOEXCEPT;
    +
    887 
    +
    889  inline meta_type type() const ENTT_NOEXCEPT;
    +
    890 
    +
    896  meta_any convert(const void *instance) const ENTT_NOEXCEPT {
    +
    897  return node->conv(instance);
    +
    898  }
    +
    899 
    +
    904  explicit operator bool() const ENTT_NOEXCEPT {
    +
    905  return node;
    +
    906  }
    +
    907 
    +
    909  bool operator==(const meta_conv &other) const ENTT_NOEXCEPT {
    +
    910  return node == other.node;
    +
    911  }
    +
    912 
    +
    913 private:
    +
    914  const internal::meta_conv_node *node;
    +
    915 };
    +
    916 
    +
    917 
    +
    919 inline bool operator!=(const meta_conv &lhs, const meta_conv &rhs) ENTT_NOEXCEPT {
    +
    920  return !(lhs == rhs);
    +
    921 }
    +
    922 
    +
    923 
    +
    925 struct meta_ctor {
    +
    927  using size_type = typename internal::meta_ctor_node::size_type;
    +
    928 
    +
    930  meta_ctor(const internal::meta_ctor_node *curr = nullptr) ENTT_NOEXCEPT
    +
    931  : node{curr}
    +
    932  {}
    +
    933 
    +
    935  inline meta_type parent() const ENTT_NOEXCEPT;
    +
    936 
    +
    941  size_type size() const ENTT_NOEXCEPT {
    +
    942  return node->size;
    +
    943  }
    +
    944 
    +
    950  meta_type arg(size_type index) const ENTT_NOEXCEPT;
    +
    951 
    +
    963  template<typename... Args>
    +
    964  meta_any invoke(Args &&... args) const {
    +
    965  std::array<meta_any, sizeof...(Args)> arguments{{std::forward<Args>(args)...}};
    +
    966  meta_any any{};
    +
    967 
    +
    968  if(sizeof...(Args) == size()) {
    +
    969  any = node->invoke(arguments.data());
    +
    970  }
    +
    971 
    +
    972  return any;
    +
    973  }
    +
    974 
    +
    980  template<typename Op>
    +
    981  std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>
    +
    982  prop(Op op) const ENTT_NOEXCEPT {
    +
    983  internal::iterate<meta_prop>(std::move(op), node->prop);
    +
    984  }
    +
    985 
    +
    991  meta_prop prop(meta_any key) const ENTT_NOEXCEPT {
    +
    992  return internal::find_if([key = std::move(key)](auto *candidate) {
    +
    993  return candidate->key() == key;
    +
    994  }, node->prop);
    +
    995  }
    +
    996 
    +
    1001  explicit operator bool() const ENTT_NOEXCEPT {
    +
    1002  return node;
    +
    1003  }
    +
    1004 
    +
    1006  bool operator==(const meta_ctor &other) const ENTT_NOEXCEPT {
    +
    1007  return node == other.node;
    +
    1008  }
    +
    1009 
    +
    1010 private:
    +
    1011  const internal::meta_ctor_node *node;
    +
    1012 };
    +
    1013 
    +
    1014 
    +
    1016 inline bool operator!=(const meta_ctor &lhs, const meta_ctor &rhs) ENTT_NOEXCEPT {
    +
    1017  return !(lhs == rhs);
    +
    1018 }
    +
    1019 
    +
    1020 
    +
    1022 struct meta_dtor {
    +
    1024  meta_dtor(const internal::meta_dtor_node *curr = nullptr) ENTT_NOEXCEPT
    +
    1025  : node{curr}
    +
    1026  {}
    +
    1027 
    +
    1029  inline meta_type parent() const ENTT_NOEXCEPT;
    +
    1030 
    +
    1041  bool invoke(meta_handle handle) const {
    +
    1042  return node->invoke(handle);
    +
    1043  }
    +
    1044 
    +
    1049  explicit operator bool() const ENTT_NOEXCEPT {
    +
    1050  return node;
    +
    1051  }
    +
    1052 
    +
    1054  bool operator==(const meta_dtor &other) const ENTT_NOEXCEPT {
    +
    1055  return node == other.node;
    +
    1056  }
    +
    1057 
    +
    1058 private:
    +
    1059  const internal::meta_dtor_node *node;
    +
    1060 };
    +
    1061 
    +
    1062 
    +
    1064 inline bool operator!=(const meta_dtor &lhs, const meta_dtor &rhs) ENTT_NOEXCEPT {
    +
    1065  return !(lhs == rhs);
    +
    1066 }
    +
    1067 
    +
    1068 
    +
    1070 struct meta_data {
    +
    1072  meta_data(const internal::meta_data_node *curr = nullptr) ENTT_NOEXCEPT
    +
    1073  : node{curr}
    +
    1074  {}
    +
    1075 
    +
    1077  ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT {
    +
    1078  return node->identifier;
    +
    1079  }
    +
    1080 
    +
    1082  inline meta_type parent() const ENTT_NOEXCEPT;
    +
    1083 
    +
    1088  bool is_const() const ENTT_NOEXCEPT {
    +
    1089  return node->is_const;
    +
    1090  }
    +
    1091 
    +
    1100  bool is_static() const ENTT_NOEXCEPT {
    +
    1101  return node->is_static;
    +
    1102  }
    +
    1103 
    +
    1105  inline meta_type type() const ENTT_NOEXCEPT;
    +
    1106 
    +
    1121  template<typename Type>
    +
    1122  bool set(meta_handle handle, Type &&value) const {
    +
    1123  return node->set(handle, meta_any{}, std::forward<Type>(value));
    +
    1124  }
    +
    1125 
    +
    1141  template<typename Type>
    +
    1142  bool set(meta_handle handle, std::size_t index, Type &&value) const {
    +
    1143  ENTT_ASSERT(index < node->type()->extent);
    +
    1144  return node->set(handle, index, std::forward<Type>(value));
    +
    1145  }
    +
    1146 
    +
    1156  meta_any get(meta_handle handle) const ENTT_NOEXCEPT {
    +
    1157  return node->get(handle, meta_any{});
    +
    1158  }
    +
    1159 
    +
    1170  meta_any get(meta_handle handle, std::size_t index) const ENTT_NOEXCEPT {
    +
    1171  ENTT_ASSERT(index < node->type()->extent);
    +
    1172  return node->get(handle, index);
    +
    1173  }
    +
    1174 
    +
    1180  template<typename Op>
    +
    1181  std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>
    +
    1182  prop(Op op) const ENTT_NOEXCEPT {
    +
    1183  internal::iterate<meta_prop>(std::move(op), node->prop);
    +
    1184  }
    +
    1185 
    +
    1191  meta_prop prop(meta_any key) const ENTT_NOEXCEPT {
    +
    1192  return internal::find_if([key = std::move(key)](auto *candidate) {
    +
    1193  return candidate->key() == key;
    +
    1194  }, node->prop);
    +
    1195  }
    +
    1196 
    +
    1201  explicit operator bool() const ENTT_NOEXCEPT {
    +
    1202  return node;
    +
    1203  }
    +
    1204 
    +
    1206  bool operator==(const meta_data &other) const ENTT_NOEXCEPT {
    +
    1207  return node == other.node;
    +
    1208  }
    +
    1209 
    +
    1210 private:
    +
    1211  const internal::meta_data_node *node;
    +
    1212 };
    +
    1213 
    +
    1214 
    +
    1216 inline bool operator!=(const meta_data &lhs, const meta_data &rhs) ENTT_NOEXCEPT {
    +
    1217  return !(lhs == rhs);
    +
    1218 }
    +
    1219 
    +
    1220 
    +
    1222 struct meta_func {
    +
    1224  using size_type = typename internal::meta_func_node::size_type;
    +
    1225 
    +
    1227  meta_func(const internal::meta_func_node *curr = nullptr) ENTT_NOEXCEPT
    +
    1228  : node{curr}
    +
    1229  {}
    +
    1230 
    +
    1232  ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT {
    +
    1233  return node->identifier;
    +
    1234  }
    +
    1235 
    +
    1237  inline meta_type parent() const ENTT_NOEXCEPT;
    +
    1238 
    +
    1243  size_type size() const ENTT_NOEXCEPT {
    +
    1244  return node->size;
    +
    1245  }
    +
    1246 
    +
    1251  bool is_const() const ENTT_NOEXCEPT {
    +
    1252  return node->is_const;
    +
    1253  }
    +
    1254 
    +
    1263  bool is_static() const ENTT_NOEXCEPT {
    +
    1264  return node->is_static;
    +
    1265  }
    +
    1266 
    +
    1271  inline meta_type ret() const ENTT_NOEXCEPT;
    +
    1272 
    +
    1278  inline meta_type arg(size_type index) const ENTT_NOEXCEPT;
    +
    1279 
    +
    1295  template<typename... Args>
    +
    1296  meta_any invoke(meta_handle handle, Args &&... args) const {
    +
    1297  // makes aliasing on the values and passes forward references if any
    +
    1298  std::array<meta_any, sizeof...(Args)> arguments{{meta_handle{args}...}};
    +
    1299  meta_any any{};
    +
    1300 
    +
    1301  if(sizeof...(Args) == size()) {
    +
    1302  any = node->invoke(handle, arguments.data());
    +
    1303  }
    +
    1304 
    +
    1305  return any;
    +
    1306  }
    +
    1307 
    +
    1313  template<typename Op>
    +
    1314  std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>
    +
    1315  prop(Op op) const ENTT_NOEXCEPT {
    +
    1316  internal::iterate<meta_prop>(std::move(op), node->prop);
    +
    1317  }
    +
    1318 
    +
    1324  meta_prop prop(meta_any key) const ENTT_NOEXCEPT {
    +
    1325  return internal::find_if([key = std::move(key)](auto *candidate) {
    +
    1326  return candidate->key() == key;
    +
    1327  }, node->prop);
    +
    1328  }
    +
    1329 
    +
    1334  explicit operator bool() const ENTT_NOEXCEPT {
    +
    1335  return node;
    +
    1336  }
    +
    1337 
    +
    1339  bool operator==(const meta_func &other) const ENTT_NOEXCEPT {
    +
    1340  return node == other.node;
    +
    1341  }
    +
    1342 
    +
    1343 private:
    +
    1344  const internal::meta_func_node *node;
    +
    1345 };
    +
    1346 
    +
    1347 
    +
    1349 inline bool operator!=(const meta_func &lhs, const meta_func &rhs) ENTT_NOEXCEPT {
    +
    1350  return !(lhs == rhs);
    +
    1351 }
    +
    1352 
    +
    1353 
    +
    1355 class meta_type {
    +
    1356  template<typename... Args, std::size_t... Indexes>
    +
    1357  auto ctor(std::index_sequence<Indexes...>) const ENTT_NOEXCEPT {
    +
    1358  return internal::find_if([](auto *candidate) {
    +
    1359  return candidate->size == sizeof...(Args) && ([](auto *from, auto *to) {
    +
    1360  return (from == to) || internal::find_if<&internal::meta_type_node::base>([to](auto *curr) { return curr->type() == to; }, from)
    +
    1361  || internal::find_if<&internal::meta_type_node::conv>([to](auto *curr) { return curr->type() == to; }, from);
    +
    1362  }(internal::meta_info<Args>::resolve(), candidate->arg(Indexes)) && ...);
    +
    1363  }, node->ctor);
    +
    1364  }
    +
    1365 
    +
    1366 public:
    +
    1368  using size_type = typename internal::meta_type_node::size_type;
    +
    1369 
    +
    1371  meta_type(const internal::meta_type_node *curr = nullptr) ENTT_NOEXCEPT
    +
    1372  : node{curr}
    +
    1373  {}
    +
    1374 
    +
    1379  ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT {
    +
    1380  return node->identifier;
    +
    1381  }
    +
    1382 
    +
    1387  bool is_void() const ENTT_NOEXCEPT {
    +
    1388  return node->is_void;
    +
    1389  }
    +
    1390 
    +
    1396  bool is_integral() const ENTT_NOEXCEPT {
    +
    1397  return node->is_integral;
    +
    1398  }
    +
    1399 
    +
    1406  bool is_floating_point() const ENTT_NOEXCEPT {
    +
    1407  return node->is_floating_point;
    +
    1408  }
    +
    1409 
    +
    1415  bool is_array() const ENTT_NOEXCEPT {
    +
    1416  return node->is_array;
    +
    1417  }
    +
    1418 
    +
    1423  bool is_enum() const ENTT_NOEXCEPT {
    +
    1424  return node->is_enum;
    +
    1425  }
    +
    1426 
    +
    1431  bool is_union() const ENTT_NOEXCEPT {
    +
    1432  return node->is_union;
    +
    1433  }
    +
    1434 
    +
    1439  bool is_class() const ENTT_NOEXCEPT {
    +
    1440  return node->is_class;
    +
    1441  }
    +
    1442 
    +
    1447  bool is_pointer() const ENTT_NOEXCEPT {
    +
    1448  return node->is_pointer;
    +
    1449  }
    +
    1450 
    +
    1457  bool is_function_pointer() const ENTT_NOEXCEPT {
    +
    1458  return node->is_function_pointer;
    +
    1459  }
    +
    1460 
    +
    1467  bool is_member_object_pointer() const ENTT_NOEXCEPT {
    +
    1468  return node->is_member_object_pointer;
    +
    1469  }
    +
    1470 
    +
    1477  bool is_member_function_pointer() const ENTT_NOEXCEPT {
    +
    1478  return node->is_member_function_pointer;
    +
    1479  }
    +
    1480 
    +
    1487  size_type extent() const ENTT_NOEXCEPT {
    +
    1488  return node->extent;
    +
    1489  }
    +
    1490 
    +
    1496  meta_type remove_pointer() const ENTT_NOEXCEPT {
    +
    1497  return node->remove_pointer();
    +
    1498  }
    +
    1499 
    +
    1505  meta_type remove_extent() const ENTT_NOEXCEPT {
    +
    1506  return node->remove_extent();
    +
    1507  }
    +
    1508 
    +
    1517  template<typename Op>
    +
    1518  std::enable_if_t<std::is_invocable_v<Op, meta_base>, void>
    +
    1519  base(Op op) const ENTT_NOEXCEPT {
    +
    1520  internal::iterate<&internal::meta_type_node::base, meta_base>(std::move(op), node);
    +
    1521  }
    +
    1522 
    +
    1531  meta_base base(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT {
    +
    1532  return internal::find_if<&internal::meta_type_node::base>([identifier](auto *candidate) {
    +
    1533  return candidate->type()->identifier == identifier;
    +
    1534  }, node);
    +
    1535  }
    +
    1536 
    +
    1546  template<typename Op>
    +
    1547  void conv(Op op) const ENTT_NOEXCEPT {
    +
    1548  internal::iterate<&internal::meta_type_node::conv, meta_conv>(std::move(op), node);
    +
    1549  }
    +
    1550 
    +
    1561  template<typename Type>
    +
    1562  meta_conv conv() const ENTT_NOEXCEPT {
    +
    1563  return internal::find_if<&internal::meta_type_node::conv>([type = internal::meta_info<Type>::resolve()](auto *candidate) {
    +
    1564  return candidate->type() == type;
    +
    1565  }, node);
    +
    1566  }
    +
    1567 
    +
    1573  template<typename Op>
    +
    1574  void ctor(Op op) const ENTT_NOEXCEPT {
    +
    1575  internal::iterate<meta_ctor>(std::move(op), node->ctor);
    +
    1576  }
    +
    1577 
    +
    1583  template<typename... Args>
    +
    1584  meta_ctor ctor() const ENTT_NOEXCEPT {
    +
    1585  return ctor<Args...>(std::index_sequence_for<Args...>{});
    +
    1586  }
    +
    1587 
    +
    1592  meta_dtor dtor() const ENTT_NOEXCEPT {
    +
    1593  return node->dtor;
    +
    1594  }
    +
    1595 
    +
    1605  template<typename Op>
    +
    1606  std::enable_if_t<std::is_invocable_v<Op, meta_data>, void>
    +
    1607  data(Op op) const ENTT_NOEXCEPT {
    +
    1608  internal::iterate<&internal::meta_type_node::data, meta_data>(std::move(op), node);
    +
    1609  }
    +
    1610 
    +
    1621  meta_data data(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT {
    +
    1622  return internal::find_if<&internal::meta_type_node::data>([identifier](auto *candidate) {
    +
    1623  return candidate->identifier == identifier;
    +
    1624  }, node);
    +
    1625  }
    +
    1626 
    +
    1637  template<typename Op>
    +
    1638  std::enable_if_t<std::is_invocable_v<Op, meta_func>, void>
    +
    1639  func(Op op) const ENTT_NOEXCEPT {
    +
    1640  internal::iterate<&internal::meta_type_node::func, meta_func>(std::move(op), node);
    +
    1641  }
    +
    1642 
    +
    1653  meta_func func(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT {
    +
    1654  return internal::find_if<&internal::meta_type_node::func>([identifier](auto *candidate) {
    +
    1655  return candidate->identifier == identifier;
    +
    1656  }, node);
    +
    1657  }
    +
    1658 
    +
    1670  template<typename... Args>
    +
    1671  meta_any construct(Args &&... args) const {
    +
    1672  std::array<meta_any, sizeof...(Args)> arguments{{std::forward<Args>(args)...}};
    +
    1673  meta_any any{};
    +
    1674 
    +
    1675  internal::find_if<&internal::meta_type_node::ctor>([data = arguments.data(), &any](auto *curr) -> bool {
    +
    1676  if(curr->size == sizeof...(args)) {
    +
    1677  any = curr->invoke(data);
    +
    1678  }
    +
    1679 
    +
    1680  return static_cast<bool>(any);
    +
    1681  }, node);
    +
    1682 
    +
    1683  return any;
    +
    1684  }
    +
    1685 
    + +
    1699  return (handle.type() == node) && (!node->dtor || node->dtor->invoke(handle));
    +
    1700  }
    +
    1701 
    +
    1711  template<typename Op>
    +
    1712  std::enable_if_t<std::is_invocable_v<Op, meta_prop>, void>
    +
    1713  prop(Op op) const ENTT_NOEXCEPT {
    +
    1714  internal::iterate<&internal::meta_type_node::prop, meta_prop>(std::move(op), node);
    +
    1715  }
    +
    1716 
    +
    1727  meta_prop prop(meta_any key) const ENTT_NOEXCEPT {
    +
    1728  return internal::find_if<&internal::meta_type_node::prop>([key = std::move(key)](auto *candidate) {
    +
    1729  return candidate->key() == key;
    +
    1730  }, node);
    +
    1731  }
    +
    1732 
    +
    1737  explicit operator bool() const ENTT_NOEXCEPT {
    +
    1738  return node;
    +
    1739  }
    +
    1740 
    +
    1742  bool operator==(const meta_type &other) const ENTT_NOEXCEPT {
    +
    1743  return node == other.node;
    +
    1744  }
    +
    1745 
    +
    1746 private:
    +
    1747  const internal::meta_type_node *node;
    +
    1748 };
    +
    1749 
    +
    1750 
    +
    1752 struct meta_ctx {
    +
    1757  static void bind(meta_ctx other) ENTT_NOEXCEPT {
    +
    1758  internal::meta_info<>::global = other.ctx;
    +
    1759  }
    +
    1760 
    +
    1761 private:
    +
    1762  internal::meta_type_node **ctx{&internal::meta_info<>::local};
    +
    1763 };
    +
    1764 
    +
    1765 
    +
    1767 inline bool operator!=(const meta_type &lhs, const meta_type &rhs) ENTT_NOEXCEPT {
    +
    1768  return !(lhs == rhs);
    +
    1769 }
    +
    1770 
    +
    1771 
    + +
    1773  : meta_any{}
    +
    1774 {
    +
    1775  node = handle.node;
    +
    1776  instance = handle.instance;
    +
    1777 }
    +
    1778 
    +
    1779 
    +
    1780 inline meta_type meta_any::type() const ENTT_NOEXCEPT {
    +
    1781  return node;
    +
    1782 }
    +
    1783 
    +
    1784 
    +
    1785 inline meta_type meta_handle::type() const ENTT_NOEXCEPT {
    +
    1786  return node;
    +
    1787 }
    +
    1788 
    +
    1789 
    +
    1790 inline meta_type meta_base::parent() const ENTT_NOEXCEPT {
    +
    1791  return node->parent;
    +
    1792 }
    +
    1793 
    +
    1794 
    +
    1795 inline meta_type meta_base::type() const ENTT_NOEXCEPT {
    +
    1796  return node->type();
    +
    1797 }
    +
    1798 
    +
    1799 
    +
    1800 inline meta_type meta_conv::parent() const ENTT_NOEXCEPT {
    +
    1801  return node->parent;
    +
    1802 }
    +
    1803 
    +
    1804 
    +
    1805 inline meta_type meta_conv::type() const ENTT_NOEXCEPT {
    +
    1806  return node->type();
    +
    1807 }
    +
    1808 
    +
    1809 
    +
    1810 inline meta_type meta_ctor::parent() const ENTT_NOEXCEPT {
    +
    1811  return node->parent;
    +
    1812 }
    +
    1813 
    +
    1814 
    +
    1815 inline meta_type meta_ctor::arg(size_type index) const ENTT_NOEXCEPT {
    +
    1816  return index < size() ? node->arg(index) : nullptr;
    +
    1817 }
    +
    1818 
    +
    1819 
    +
    1820 inline meta_type meta_dtor::parent() const ENTT_NOEXCEPT {
    +
    1821  return node->parent;
    +
    1822 }
    +
    1823 
    +
    1824 
    +
    1825 inline meta_type meta_data::parent() const ENTT_NOEXCEPT {
    +
    1826  return node->parent;
    +
    1827 }
    +
    1828 
    +
    1829 
    +
    1830 inline meta_type meta_data::type() const ENTT_NOEXCEPT {
    +
    1831  return node->type();
    +
    1832 }
    +
    1833 
    +
    1834 
    +
    1835 inline meta_type meta_func::parent() const ENTT_NOEXCEPT {
    +
    1836  return node->parent;
    +
    1837 }
    +
    1838 
    +
    1839 
    +
    1840 inline meta_type meta_func::ret() const ENTT_NOEXCEPT {
    +
    1841  return node->ret();
    +
    1842 }
    +
    1843 
    +
    1844 
    +
    1845 inline meta_type meta_func::arg(size_type index) const ENTT_NOEXCEPT {
    +
    1846  return index < size() ? node->arg(index) : nullptr;
    +
    1847 }
    +
    1848 
    +
    1849 
    +
    1850 }
    +
    1851 
    +
    1852 
    +
    1853 #endif // ENTT_META_META_HPP
    +
    meta_any & operator=(meta_any &&other) ENTT_NOEXCEPT
    Move assignment operator.
    Definition: meta.hpp:500
    +
    meta_data data(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT
    Returns the meta data associated with a given identifier.
    Definition: meta.hpp:1621
    +
    meta_any(meta_any &&other) ENTT_NOEXCEPT
    Move constructor.
    Definition: meta.hpp:462
    +
    meta_any(const meta_any &other)
    Copy constructor.
    Definition: meta.hpp:443
    +
    friend void swap(meta_any &lhs, meta_any &rhs) ENTT_NOEXCEPT
    Swaps two meta any objects.
    Definition: meta.hpp:660
    +
    std::enable_if_t< std::is_invocable_v< Op, meta_data >, void > data(Op op) const ENTT_NOEXCEPT
    Iterates all the meta data of a meta type.
    Definition: meta.hpp:1607
    +
    Opaque container for values of any type.
    Definition: meta.hpp:311
    +
    void ctor(Op op) const ENTT_NOEXCEPT
    Iterates all the meta constructors of a meta type.
    Definition: meta.hpp:1574
    +
    bool is_integral() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to an integral type or not.
    Definition: meta.hpp:1396
    +
    Type & cast() ENTT_NOEXCEPT
    Tries to cast an instance to a given type.
    Definition: meta.hpp:577
    +
    meta_type type() const ENTT_NOEXCEPT
    Returns the meta type of the underlying object.
    Definition: meta.hpp:1805
    +
    typename internal::meta_ctor_node::size_type size_type
    Unsigned integer type.
    Definition: meta.hpp:927
    +
    meta_handle() ENTT_NOEXCEPT
    Default constructor.
    Definition: meta.hpp:706
    +
    typename internal::meta_type_node::size_type size_type
    Unsigned integer type.
    Definition: meta.hpp:1368
    +
    Opaque container for meta data.
    Definition: meta.hpp:1070
    +
    meta_base(const internal::meta_base_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:832
    +
    meta_data(const internal::meta_data_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:1072
    +
    const Type & cast() const ENTT_NOEXCEPT
    Tries to cast an instance to a given type.
    Definition: meta.hpp:569
    +
    Opaque pointers to instances of any type.
    Definition: meta.hpp:700
    +
    meta_type arg(size_type index) const ENTT_NOEXCEPT
    Returns the meta type of the i-th argument of a meta function.
    Definition: meta.hpp:1845
    +
    meta_prop prop(meta_any key) const ENTT_NOEXCEPT
    Returns the property associated with a given key.
    Definition: meta.hpp:1727
    +
    constexpr get_t< Type... > get
    Variable template for lists of observed components.
    Definition: utility.hpp:40
    +
    bool operator==(const meta_type &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:1742
    +
    meta_base base(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT
    Returns the meta base associated with a given identifier.
    Definition: meta.hpp:1531
    +
    bool is_floating_point() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a floating-point type or not.
    Definition: meta.hpp:1406
    +
    meta_any() ENTT_NOEXCEPT
    Default constructor.
    Definition: meta.hpp:378
    +
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1825
    +
    ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT
    Returns the identifier assigned to a given meta object.
    Definition: meta.hpp:1077
    +
    void * data() ENTT_NOEXCEPT
    Returns an opaque pointer to the contained instance.
    Definition: meta.hpp:740
    +
    meta_any(Type &&type)
    Constructs a meta any from a given value.
    Definition: meta.hpp:435
    +
    Opaque container for meta conversion functions.
    Definition: meta.hpp:879
    +
    bool is_pointer() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a pointer or not.
    Definition: meta.hpp:1447
    +
    meta_type type() const ENTT_NOEXCEPT
    Returns the meta type of the underlying object.
    Definition: meta.hpp:1795
    +
    meta_type resolve() ENTT_NOEXCEPT
    Returns the meta type associated with a given type.
    Definition: factory.hpp:826
    +
    Opaque container for meta properties of any type.
    Definition: meta.hpp:770
    +
    std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop(Op op) const ENTT_NOEXCEPT
    Iterates all the properties assigned to a meta function.
    Definition: meta.hpp:1315
    +
    Opaque container for meta destructors.
    Definition: meta.hpp:1022
    +
    meta_type remove_extent() const ENTT_NOEXCEPT
    Provides the meta type for which the array is defined.
    Definition: meta.hpp:1505
    +
    Opaque container for meta constructors.
    Definition: meta.hpp:925
    +
    meta_prop prop(meta_any key) const ENTT_NOEXCEPT
    Returns the property associated with a given key.
    Definition: meta.hpp:1324
    +
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1820
    +
    bool operator==(const meta_base &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:863
    +
    bool destroy(meta_handle handle) const
    Destroys an instance of the underlying type.
    Definition: meta.hpp:1698
    +
    meta_any get(meta_handle handle, std::size_t index) const ENTT_NOEXCEPT
    Gets the i-th element of an array enclosed by a given meta type.
    Definition: meta.hpp:1170
    +
    bool is_static() const ENTT_NOEXCEPT
    Indicates whether a given meta function is static or not.
    Definition: meta.hpp:1263
    +
    Opaque container for meta functions.
    Definition: meta.hpp:1222
    +
    bool operator==(const meta_ctor &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:1006
    +
    bool is_array() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to an array type or not.
    Definition: meta.hpp:1415
    +
    bool convert()
    Tries to convert an instance to a given type.
    Definition: meta.hpp:612
    +
    meta_type ret() const ENTT_NOEXCEPT
    Returns the meta type of the return type of a meta function.
    Definition: meta.hpp:1840
    +
    ~meta_any()
    Frees the internal storage, whatever it means.
    Definition: meta.hpp:469
    +
    bool operator==(const meta_conv &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:909
    +
    void emplace(Args &&... args)
    Replaces the contained object by initializing a new instance directly.
    Definition: meta.hpp:633
    +
    meta_type type() const ENTT_NOEXCEPT
    Returns the meta type of the underlying object.
    Definition: meta.hpp:1780
    +
    Shared resource handle.
    Definition: fwd.hpp:14
    +
    meta_any get(meta_handle handle) const ENTT_NOEXCEPT
    Gets the value of the variable enclosed by a given meta type.
    Definition: meta.hpp:1156
    +
    std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop(Op op) const ENTT_NOEXCEPT
    Iterates all the properties assigned to a meta constructor.
    Definition: meta.hpp:982
    +
    meta_any key() const ENTT_NOEXCEPT
    Returns the stored key.
    Definition: meta.hpp:783
    +
    meta_type remove_pointer() const ENTT_NOEXCEPT
    Provides the meta type for which the pointer is defined.
    Definition: meta.hpp:1496
    +
    meta_any construct(Args &&... args) const
    Creates an instance of the underlying type, if possible.
    Definition: meta.hpp:1671
    +
    bool operator==(const meta_prop &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:809
    +
    meta_any convert() const
    Tries to convert an instance to a given type and returns it.
    Definition: meta.hpp:588
    +
    bool set(meta_handle handle, std::size_t index, Type &&value) const
    Sets the i-th element of an array enclosed by a given meta type.
    Definition: meta.hpp:1142
    +
    meta_any & operator=(Type &&type)
    Assignment operator.
    Definition: meta.hpp:482
    +
    Type * try_cast() ENTT_NOEXCEPT
    Tries to cast an instance to a given type.
    Definition: meta.hpp:550
    +
    ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT
    Returns the identifier assigned to a given meta object.
    Definition: meta.hpp:1379
    +
    meta_type type() const ENTT_NOEXCEPT
    Returns the meta type of the underlying object.
    Definition: meta.hpp:1830
    +
    std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop(Op op) const ENTT_NOEXCEPT
    Iterates all the properties assigned to a meta type.
    Definition: meta.hpp:1713
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    bool operator==(const meta_any &other) const ENTT_NOEXCEPT
    Checks if two containers differ in their content.
    Definition: meta.hpp:651
    +
    meta_type type() const ENTT_NOEXCEPT
    Returns the meta type of the underlying object.
    Definition: meta.hpp:1785
    +
    std::enable_if_t< std::is_invocable_v< Op, meta_base >, void > base(Op op) const ENTT_NOEXCEPT
    Iterates all the meta base of a meta type.
    Definition: meta.hpp:1519
    +
    void conv(Op op) const ENTT_NOEXCEPT
    Iterates all the meta conversion functions of a meta type.
    Definition: meta.hpp:1547
    +
    meta_ctor ctor() const ENTT_NOEXCEPT
    Returns the meta constructor that accepts a given list of types of arguments.
    Definition: meta.hpp:1584
    +
    bool is_static() const ENTT_NOEXCEPT
    Indicates whether a given meta data is static or not.
    Definition: meta.hpp:1100
    +
    void * data() ENTT_NOEXCEPT
    Returns an opaque pointer to the contained instance.
    Definition: meta.hpp:521
    +
    meta_any invoke(Args &&... args) const
    Creates an instance of the underlying type, if possible.
    Definition: meta.hpp:964
    +
    meta_conv(const internal::meta_conv_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:881
    +
    meta_conv conv() const ENTT_NOEXCEPT
    Returns the meta conversion function associated with a given type.
    Definition: meta.hpp:1562
    +
    bool is_member_function_pointer() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a pointer to member function or not.
    Definition: meta.hpp:1477
    +
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1800
    +
    meta_any & operator=(const meta_any &other)
    Copy assignment operator.
    Definition: meta.hpp:491
    +
    meta_any(std::in_place_type_t< Type >, [[maybe_unused]] Args &&... args)
    Constructs a meta any by directly initializing the new object.
    Definition: meta.hpp:394
    +
    bool operator==(const meta_data &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:1206
    +
    Opaque container for meta types.
    Definition: meta.hpp:1355
    +
    bool is_function_pointer() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a function pointer or not.
    Definition: meta.hpp:1457
    +
    constexpr bool operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT
    Compares two hashed strings.
    +
    typename internal::meta_func_node::size_type size_type
    Unsigned integer type.
    Definition: meta.hpp:1224
    +
    Basic storage implementation.
    Definition: storage.hpp:697
    +
    const Type * try_cast() const ENTT_NOEXCEPT
    Tries to cast an instance to a given type.
    Definition: meta.hpp:531
    +
    meta_prop(const internal::meta_prop_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:775
    +
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1810
    +
    bool is_union() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to an union or not.
    Definition: meta.hpp:1431
    +
    meta_ctor(const internal::meta_ctor_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:930
    +
    meta_type arg(size_type index) const ENTT_NOEXCEPT
    Returns the meta type of the i-th argument of a meta constructor.
    Definition: meta.hpp:1815
    +
    Types identifiers.
    Definition: ident.hpp:42
    +
    static void bind(meta_ctx other) ENTT_NOEXCEPT
    Binds the meta system to the given context.
    Definition: meta.hpp:1757
    +
    meta_type(const internal::meta_type_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:1371
    +
    meta_func(const internal::meta_func_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:1227
    +
    meta_dtor dtor() const ENTT_NOEXCEPT
    Returns the meta destructor associated with a given type.
    Definition: meta.hpp:1592
    +
    meta_dtor(const internal::meta_dtor_node *curr=nullptr) ENTT_NOEXCEPT
    Constructs an instance from a given node.
    Definition: meta.hpp:1024
    +
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1835
    +
    size_type extent() const ENTT_NOEXCEPT
    If a given meta type refers to an array type, provides the number of elements of the array.
    Definition: meta.hpp:1487
    +
    meta_prop prop(meta_any key) const ENTT_NOEXCEPT
    Returns the property associated with a given key.
    Definition: meta.hpp:991
    +
    std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop(Op op) const ENTT_NOEXCEPT
    Iterates all the properties assigned to a meta data.
    Definition: meta.hpp:1182
    +
    ENTT_ID_TYPE identifier() const ENTT_NOEXCEPT
    Returns the identifier assigned to a given meta object.
    Definition: meta.hpp:1232
    +
    bool is_void() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to void or not.
    Definition: meta.hpp:1387
    +
    meta_prop prop(meta_any key) const ENTT_NOEXCEPT
    Returns the property associated with a given key.
    Definition: meta.hpp:1191
    +
    Opaque container for a meta context.
    Definition: meta.hpp:1752
    +
    bool is_const() const ENTT_NOEXCEPT
    Indicates whether a given meta function is constant or not.
    Definition: meta.hpp:1251
    +
    bool is_class() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a class or not.
    Definition: meta.hpp:1439
    +
    bool is_member_object_pointer() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to a pointer to data member or not.
    Definition: meta.hpp:1467
    +
    meta_handle(Type &obj) ENTT_NOEXCEPT
    Constructs a meta handle from a given instance.
    Definition: meta.hpp:726
    +
    meta_any(std::reference_wrapper< Type > type)
    Constructs a meta any that holds an unmanaged object.
    Definition: meta.hpp:416
    +
    meta_type parent() const ENTT_NOEXCEPT
    Returns the meta type to which a meta object belongs.
    Definition: meta.hpp:1790
    +
    meta_handle(meta_any &any) ENTT_NOEXCEPT
    Constructs a meta handle from a meta any object.
    Definition: meta.hpp:715
    +
    bool operator==(const meta_dtor &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:1054
    +
    meta_any value() const ENTT_NOEXCEPT
    Returns the stored value.
    Definition: meta.hpp:791
    +
    std::enable_if_t< std::is_invocable_v< Op, meta_func >, void > func(Op op) const ENTT_NOEXCEPT
    Iterates all the meta functions of a meta type.
    Definition: meta.hpp:1639
    +
    meta_func func(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT
    Returns the meta function associated with a given identifier.
    Definition: meta.hpp:1653
    +
    bool is_enum() const ENTT_NOEXCEPT
    Indicates whether a given meta type refers to an enum or not.
    Definition: meta.hpp:1423
    +
    bool operator==(const meta_func &other) const ENTT_NOEXCEPT
    Checks if two meta objects refer to the same node.
    Definition: meta.hpp:1339
    +
    Opaque container for meta base classes.
    Definition: meta.hpp:830
    diff --git a/meta_8md_source.html b/meta_8md_source.html deleted file mode 100644 index 7335623f2..000000000 --- a/meta_8md_source.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - -EnTT: docs/md/meta.md Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    EnTT -  3.2.1 -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    docs/md/meta.md
    -
    -
    -
    1 # Crash Course: runtime reflection system
    2 
    3 <!--
    4 @cond TURN_OFF_DOXYGEN
    5 -->
    6 # Table of Contents
    7 
    8 * [Introduction](#introduction)
    9 * [Names and identifiers](#names-and-identifiers)
    10 * [Reflection in a nutshell](#reflection-in-a-nutshell)
    11  * [Any as in any type](#any-as-in-any-type)
    12  * [Enjoy the runtime](#enjoy-the-runtime)
    13  * [Policies: the more, the less](#policies-the-more-the-less)
    14  * [Named constants and enums](#named-constants-and-enums)
    15  * [Properties and meta objects](#properties-and-meta-objects)
    16  * [Unregister types](#unregister-types)
    17 <!--
    18 @endcond TURN_OFF_DOXYGEN
    19 -->
    20 
    21 # Introduction
    22 
    23 Reflection (or rather, its lack) is a trending topic in the C++ world and, in
    24 the specific case of `EnTT`, a tool that can unlock a lot of other features. I
    25 looked for a third-party library that met my needs on the subject, but I always
    26 came across some details that I didn't like: macros, being intrusive, too many
    27 allocations. In one word: unsatisfactory.<br/>
    28 I finally decided to write a built-in, non-intrusive and macro-free runtime
    29 reflection system for `EnTT`. Maybe I didn't do better than others or maybe yes,
    30 time will tell me, but at least I can model this tool around the library to
    31 which it belongs and not vice versa.
    32 
    33 # Names and identifiers
    34 
    35 The meta system doesn't force the user to use the tools provided by the library
    36 when it comes to working with names and identifiers. It does this by offering an
    37 API that works with opaque identifiers that may or may not be generated by means
    38 of a hashed string.<br/>
    39 This means that users can assign any type of identifier to the meta objects, as
    40 long as they are numeric. It doesn't matter if they are generated at runtime, at
    41 compile-time or with custom functions.
    42 
    43 However, the examples in the following sections are all based on the
    44 `hashed_string` class as provided by this library. Therefore, where an
    45 identifier is required, it's likely that a user defined literal is used as
    46 follows:
    47 
    48 ```cpp
    49 auto factory = entt::meta<my_type>().type("reflected_type"_hs);
    50 ```
    51 
    52 For what it's worth, this is likely completely equivalent to:
    53 
    54 ```cpp
    55 auto factory = entt::meta<my_type>().type(42);
    56 ```
    57 
    58 Obviously, human-readable identifiers are more convenient to use and highly
    59 recommended.
    60 
    61 # Reflection in a nutshell
    62 
    63 Reflection always starts from real types (users cannot reflect imaginary types
    64 and it would not make much sense, we wouldn't be talking about reflection
    65 anymore).<br/>
    66 To create a meta node, the library provides the `meta` function that accepts a
    67 type to reflect as a template parameter:
    68 
    69 ```cpp
    70 auto factory = entt::meta<my_type>();
    71 ```
    72 
    73 This isn't enough to _export_ the given type and make it visible though.<br/>
    74 The returned value is a factory object to use to continue building the meta
    75 type. In order to make the type _visible_, users can assign it an identifier:
    76 
    77 ```cpp
    78 auto factory = entt::meta<my_type>().type("reflected_type"_hs);
    79 ```
    80 
    81 When working with named types, it isn't even necessary to specify the
    82 identifier. In fact, it isn't allowed and it will trigger a compilation
    83 error.<br/>
    84 Identifiers are important because users can retrieve meta types at runtime by
    85 searching for them by _name_ other than by type. On the other hand, there are
    86 cases in which users can be interested in adding features to a reflected type so
    87 that the reflection system can use it correctly under the hood, but they don't
    88 want to allow searching the type by _name_. In this case, it's sufficient not
    89 to invoke `type` and the type will not be searchable _by name_.
    90 
    91 A factory is such that all its member functions returns the factory itself or
    92 a decorated version of it. This object can be used to add the following:
    93 
    94 * _Constructors_. Actual constructors can be assigned to a reflected type by
    95  specifying their list of arguments. Free functions (namely, factories) can be
    96  used as well, as long as the return type is the expected one. From a client's
    97  point of view, nothing changes if a constructor is a free function or an
    98  actual constructor.<br/>
    99  Use the `ctor` member function for this purpose:
    100 
    101  ```cpp
    102  entt::meta<my_type>().ctor<int, char>().ctor<&factory>();
    103  ```
    104 
    105 * _Destructors_. Free functions can be set as destructors of reflected types.
    106  The purpose is to give users the ability to free up resources that require
    107  special treatment before an object is actually destroyed.<br/>
    108  Use the `dtor` member function for this purpose:
    109 
    110  ```cpp
    111  entt::meta<my_type>().dtor<&destroy>();
    112  ```
    113 
    114  A function should neither delete nor explicitly invoke the destructor of a
    115  given instance.
    116 
    117 * _Data members_. Both real data members of the underlying type and static and
    118  global variables, as well as constants of any kind, can be attached to a meta
    119  type. From a client's point of view, all the variables associated with the
    120  reflected type will appear as if they were part of the type itself.<br/>
    121  Use the `data` member function for this purpose:
    122 
    123  ```cpp
    124  entt::meta<my_type>()
    125  .data<&my_type::static_variable>("static"_hs)
    126  .data<&my_type::data_member>("member"_hs)
    127  .data<&global_variable>("global"_hs);
    128  ```
    129 
    130  This function requires as an argument the identifier to give to the meta data
    131  once created. Users can then access meta data at runtime by searching for them
    132  by _name_.<br/>
    133  Data members can be set also by means of a couple of functions, namely a
    134  setter and a getter. Setters and getters can be either free functions, member
    135  functions or mixed ones, as long as they respect the required signatures.<br/>
    136  Refer to the inline documentation for all the details.
    137 
    138 * _Member functions_. Both real member functions of the underlying type and free
    139  functions can be attached to a meta type. From a client's point of view, all
    140  the functions associated with the reflected type will appear as if they were
    141  part of the type itself.<br/>
    142  Use the `func` member function for this purpose:
    143 
    144  ```cpp
    145  entt::meta<my_type>()
    146  .func<&my_type::static_function>("static"_hs)
    147  .func<&my_type::member_function>("member"_hs)
    148  .func<&free_function>("free"_hs);
    149  ```
    150 
    151  This function requires as an argument the identifier to give to the meta
    152  function once created. Users can then access meta functions at runtime by
    153  searching for them by _name_.
    154 
    155 * _Base classes_. A base class is such that the underlying type is actually
    156  derived from it. In this case, the reflection system tracks the relationship
    157  and allows for implicit casts at runtime when required.<br/>
    158  Use the `base` member function for this purpose:
    159 
    160  ```cpp
    161  entt::meta<derived_type>().base<base_type>();
    162  ```
    163 
    164  From now on, wherever a `base_type` is required, an instance of `derived_type`
    165  will also be accepted.
    166 
    167 * _Conversion functions_. Actual types can be converted, this is a fact. Just
    168  think of the relationship between a `double` and an `int` to see it. Similar
    169  to bases, conversion functions allow users to define conversions that will be
    170  implicitly performed by the reflection system when required.<br/>
    171  Use the `conv` member function for this purpose:
    172 
    173  ```cpp
    174  entt::meta<double>().conv<int>();
    175  ```
    176 
    177 That's all, everything users need to create meta types and enjoy the reflection
    178 system. At first glance it may not seem that much, but users usually learn to
    179 appreciate it over time.<br/>
    180 Also, do not forget what these few lines hide under the hood: a built-in,
    181 non-intrusive and macro-free system for reflection in C++. Features that are
    182 definitely worth the price, at least for me.
    183 
    184 ## Any as in any type
    185 
    186 The reflection system comes with its own `meta_any` type. It may seem redundant
    187 since C++17 introduced `std::any`, but it is not.<br/>
    188 In fact, the _type_ returned by an `std::any` is a const reference to an
    189 `std::type_info`, an implementation defined class that's not something everyone
    190 wants to see in a software. Furthermore, the class `std::type_info` suffers from
    191 some design flaws and there is even no way to _convert_ an `std::type_info` into
    192 a meta type, thus linking the two worlds.
    193 
    194 The class `meta_any` offers an API similar to that of its most famous
    195 counterpart and serves the same purpose of being an opaque container for any
    196 type of value.<br/>
    197 It minimizes the allocations required, which are almost absent thanks to _SBO_
    198 techniques. In fact, unless users deal with _fat types_ and create instances of
    199 them through the reflection system, allocations are at zero.
    200 
    201 Creating instances of `meta_any`, whether empty or from existing objects, is
    202 trivial:
    203 
    204 ```cpp
    205 // a container for an int
    206 entt::meta_any any{0};
    207 
    208 // an empty container
    209 entt::meta_any empty{};
    210 ```
    211 
    212 The `meta_any` class takes also the burden of destroying the contained object
    213 when required.<br/>
    214 Furthermore, an instance of `meta_any` is not tied to a specific type.
    215 Therefore, the wrapper will be reconfigured by assigning it an object of a
    216 different type than the one contained, so as to be able to handle the new
    217 instance.
    218 
    219 A particularly interesting feature of this class is that it can also be used as
    220 an opaque container for unmanaged objects:
    221 
    222 ```cpp
    223 int value;
    224 entt::meta_any any{std::ref(value)};
    225 ```
    226 
    227 In other words, whenever `meta_any` intercepts a `reference_wrapper`, it acts as
    228 a reference to the original instance rather than making a copy of it. The
    229 contained object is never destroyed and users must ensure that its lifetime
    230 exceeds that of the container.
    231 
    232 The `meta_any` class has also a `type` member function that returns the meta
    233 type of the contained value, if any. The member functions `try_cast`, `cast` and
    234 `convert` are used to know if the underlying object has a given type as a base
    235 or if it can be converted implicitly to it.
    236 
    237 ## Enjoy the runtime
    238 
    239 Once the web of reflected types has been constructed, it's a matter of using it
    240 at runtime where required.<br/>
    241 All this has the great merit that, unlike the vast majority of the things
    242 present in this library and closely linked to the compile-time, the reflection
    243 system stands in fact as a non-intrusive tool for the runtime.
    244 
    245 To search for a reflected type there are two options: by type or by _name_. In
    246 both cases, the search can be done by means of the `resolve` function:
    247 
    248 ```cpp
    249 // search for a reflected type by type
    250 auto by_type = entt::resolve<my_type>();
    251 
    252 // search for a reflected type by name
    253 auto by_name = entt::resolve("reflected_type"_hs);
    254 ```
    255 
    256 There exits also a third overload of the `resolve` function to use to iterate
    257 all the reflected types at once:
    258 
    259 ```cpp
    260 resolve([](auto type) {
    261  // ...
    262 });
    263 ```
    264 
    265 In all cases, the returned value is an instance of `meta_type`. This kind of
    266 objects offer an API to know their _runtime identifiers_, to iterate all the
    267 meta objects associated with them and even to build or destroy instances of the
    268 underlying type.<br/>
    269 Refer to the inline documentation for all the details.
    270 
    271 The meta objects that compose a meta type are accessed in the following ways:
    272 
    273 * _Meta constructors_. They are accessed by types of arguments:
    274 
    275  ```cpp
    276  auto ctor = entt::resolve<my_type>().ctor<int, char>();
    277  ```
    278 
    279  The returned type is `meta_ctor` and may be invalid if there is no constructor
    280  that accepts the supplied arguments or at least some types from which they are
    281  derived or to which they can be converted.<br/>
    282  A meta constructor offers an API to know the number of arguments, the expected
    283  meta types and to invoke it, therefore to construct a new instance of the
    284  underlying type.
    285 
    286 * _Meta destructor_. It's returned by a dedicated function:
    287 
    288  ```cpp
    289  auto dtor = entt::resolve<my_type>().dtor();
    290  ```
    291 
    292  The returned type is `meta_dtor` and may be invalid if there is no custom
    293  destructor set for the given meta type.<br/>
    294  All what a meta destructor has to offer is a way to invoke it on a given
    295  instance. Be aware that the result may not be what is expected.
    296 
    297 * _Meta data_. They are accessed by _name_:
    298 
    299  ```cpp
    300  auto data = entt::resolve<my_type>().data("member"_hs);
    301  ```
    302 
    303  The returned type is `meta_data` and may be invalid if there is no meta data
    304  object associated with the given identifier.<br/>
    305  A meta data object offers an API to query the underlying type (for example, to
    306  know if it's a const or a static one), to get the meta type of the variable
    307  and to set or get the contained value.
    308 
    309 * _Meta functions_. They are accessed by _name_:
    310 
    311  ```cpp
    312  auto func = entt::resolve<my_type>().func("member"_hs);
    313  ```
    314 
    315  The returned type is `meta_func` and may be invalid if there is no meta
    316  function object associated with the given identifier.<br/>
    317  A meta function object offers an API to query the underlying type (for
    318  example, to know if it's a const or a static function), to know the number of
    319  arguments, the meta return type and the meta types of the parameters. In
    320  addition, a meta function object can be used to invoke the underlying function
    321  and then get the return value in the form of a `meta_any` object.
    322 
    323 * _Meta bases_. They are accessed through the _name_ of the base types:
    324 
    325  ```cpp
    326  auto base = entt::resolve<derived_type>().base("base"_hs);
    327  ```
    328 
    329  The returned type is `meta_base` and may be invalid if there is no meta base
    330  object associated with the given identifier.<br/>
    331  Meta bases aren't meant to be used directly, even though they are freely
    332  accessible. They expose only a few methods to use to know the meta type of the
    333  base class and to convert a raw pointer between types.
    334 
    335 * _Meta conversion functions_. They are accessed by type:
    336 
    337  ```cpp
    338  auto conv = entt::resolve<double>().conv<int>();
    339  ```
    340 
    341  The returned type is `meta_conv` and may be invalid if there is no meta
    342  conversion function associated with the given type.<br/>
    343  The meta conversion functions are as thin as the meta bases and with a very
    344  similar interface. The sole difference is that they return a newly created
    345  instance wrapped in a `meta_any` object when they convert between different
    346  types.
    347 
    348 All the objects thus obtained as well as the meta types can be explicitly
    349 converted to a boolean value to check if they are valid:
    350 
    351 ```cpp
    352 if(auto func = entt::resolve<my_type>().func("member"_hs); func) {
    353  // ...
    354 }
    355 ```
    356 
    357 Furthermore, all meta objects with the exception of meta destructors can be
    358 iterated through an overload that accepts a callback through which to return
    359 them. As an example:
    360 
    361 ```cpp
    362 entt::resolve<my_type>().data([](auto data) {
    363  // ...
    364 });
    365 ```
    366 
    367 A meta type can also be used to `construct` or `destroy` actual instances of the
    368 underlying type.<br/>
    369 In particular, the `construct` member function accepts a variable number of
    370 arguments and searches for a match. It returns a `meta_any` object that may or
    371 may not be initialized, depending on whether a suitable constructor has been
    372 found or not. On the other side, the `destroy` member function accepts instances
    373 of `meta_any` as well as actual objects by reference and invokes the registered
    374 destructor, if any.<br/>
    375 Be aware that the result of a call to `destroy` may not be what is expected. The
    376 purpose is to give users the ability to free up resources that require special
    377 treatment and **not** to actually destroy instances.
    378 
    379 Meta types and meta objects in general contain much more than what is said: a
    380 plethora of functions in addition to those listed whose purposes and uses go
    381 unfortunately beyond the scope of this document.<br/>
    382 I invite anyone interested in the subject to look at the code, experiment and
    383 read the inline documentation to get the best out of this powerful tool.
    384 
    385 ## Policies: the more, the less
    386 
    387 Policies are a kind of compile-time directives that can be used when recording
    388 reflection information.<br/>
    389 Their purpose is to require slightly different behavior than the default in some
    390 specific cases. For example, when reading a given data member, its value is
    391 returned wrapped in a `meta_any` object which, by default, makes a copy of it.
    392 For large objects or if the caller wants to access the original instance, this
    393 behavior isn't desirable. Policies are there to offer a solution to this and
    394 other problems.
    395 
    396 There are a few alternatives available at the moment:
    397 
    398 * The _as-is_ policy, associated with the type `entt::as_is_t`.<br/>
    399  This is the default policy. In general, it should never be used explicitly,
    400  since it's implicitly selected if no other policy is specified.<br/>
    401  In this case, the return values of the functions as well as the properties
    402  exposed as data members are always returned by copy in a dedicated wrapper and
    403  therefore associated with their original meta types.
    404 
    405 * The _as-void_ policy, associated with the type `entt::as_void_t`.<br/>
    406  Its purpose is to discard the return value of a meta object, whatever it is,
    407  thus making it appear as if its type were `void`.<br/>
    408  If the use with functions is obvious, it must be said that it's also possible
    409  to use this policy with constructors and data members. In the first case, the
    410  constructor will be invoked but the returned wrapper will actually be empty.
    411  In the second case, instead, the property will not be accessible for reading.
    412 
    413  As an example of use:
    414 
    415  ```cpp
    416  entt::meta<my_type>().func<&my_type::member_function, entt::as_void_t>("member"_hs);
    417  ```
    418 
    419 * The _as-alias_ policy, associated with the type `entt::as_alias_t`.<br/>
    420  It allows to build wrappers that act as aliases for the objects used to
    421  initialize them. Modifying the object contained in the wrapper for which the
    422  _aliasing_ was requested will make it possible to directly modify the instance
    423  used to initialize the wrapper itself.<br/>
    424  This policy works with constructors (for example, when objects are taken from
    425  an external container rather than created on demand), data members and
    426  functions in general (as long as their return types are lvalue references).
    427 
    428  As an example of use:
    429 
    430  ```cpp
    431  entt::meta<my_type>().data<&my_type::data_member, entt::as_alias_t>("member"_hs);
    432  ```
    433 
    434 Some uses are rather trivial, but it's useful to note that there are some less
    435 obvious corner cases that can in turn be solved with the use of policies.
    436 
    437 ## Named constants and enums
    438 
    439 A special mention should be made for constant values and enums. It wouldn't be
    440 necessary, but it will help distracted readers.
    441 
    442 As mentioned, the `data` member function can be used to reflect constants of any
    443 type among the other things.<br/>
    444 This allows users to create meta types for enums that will work exactly like any
    445 other meta type built from a class. Similarly, arithmetic types can be enriched
    446 with constants of special meaning where required.<br/>
    447 Personally, I find it very useful not to export what is the difference between
    448 enums and classes in C++ directly in the space of the reflected types.
    449 
    450 All the values thus exported will appear to users as if they were constant data
    451 members of the reflected types.
    452 
    453 Exporting constant values or elements from an enum is as simple as ever:
    454 
    455 ```cpp
    456 entt::meta<my_enum>()
    457  .data<my_enum::a_value>("a_value"_hs)
    458  .data<my_enum::another_value>("another_value"_hs);
    459 
    460 entt::meta<int>().data<2048>("max_int"_hs);
    461 ```
    462 
    463 It goes without saying that accessing them is trivial as well. It's a matter of
    464 doing the following, as with any other data member of a meta type:
    465 
    466 ```cpp
    467 auto value = entt::resolve<my_enum>().data("a_value"_hs).get({}).cast<my_enum>();
    468 auto max = entt::resolve<int>().data("max_int"_hs).get({}).cast<int>();
    469 ```
    470 
    471 As a side note, remember that all this happens behind the scenes without any
    472 allocation because of the small object optimization performed by the `meta_any`
    473 class.
    474 
    475 ## Properties and meta objects
    476 
    477 Sometimes (for example, when it comes to creating an editor) it might be useful
    478 to attach properties to the meta objects created. Fortunately, this is possible
    479 for most of them.<br/>
    480 For the meta objects that support properties, the member functions of the
    481 factory used for registering them will return a decorated version of the factory
    482 itself. The latter can be used to attach properties to the last created meta
    483 object.<br/>
    484 Apparently, it's more difficult to say than to do:
    485 
    486 ```cpp
    487 entt::meta<my_type>().type("reflected_type"_hs).prop("tooltip"_hs, "message");
    488 ```
    489 
    490 Properties are always in the key/value form. There are no restrictions on the
    491 type of the key or value, as long as they are copy constructible objects.<br/>
    492 Multiple formats are supported when it comes to defining a property:
    493 
    494 * Properties as key/value pairs:
    495 
    496  ```cpp
    497  entt::meta<my_type>().type("reflected_type"_hs).prop("tooltip"_hs, "message");
    498  ```
    499 
    500 * Properties as `std::pair`s:
    501 
    502  ```cpp
    503  entt::meta<my_type>().type("reflected_type"_hs).prop(std::make_pair("tooltip"_hs, "message"));
    504  ```
    505 
    506 * Key only properties:
    507 
    508  ```cpp
    509  entt::meta<my_type>().type("reflected_type"_hs).prop(my_enum::key_only);
    510  ```
    511 
    512 * Properties as `std::tuple`s:
    513 
    514  ```cpp
    515  entt::meta<my_type>().type("reflected_type"_hs)
    516  .prop(std::make_tuple(std::make_pair("tooltip"_hs, "message"), my_enum::key_only));
    517  ```
    518 
    519  A tuple contains one or more properties. All of them are treated individually.
    520 
    521 * Annotations:
    522 
    523  ```cpp
    524  entt::meta<my_type>().type("reflected_type"_hs).prop(&property_generator);
    525  ```
    526 
    527  An annotation is an invocable object that returns one or more properties. All
    528  of them are treated individually.
    529 
    530 It's possible to invoke the `prop` function several times if needed, one for
    531 each property to associate with the last meta object created:
    532 
    533 ```cpp
    534 entt::meta<my_type>()
    535  .type("reflected_type"_hs)
    536  .prop(entt::hashed_string{"Name"}, "Reflected Type")
    537  .data<&my_type::data_member>("member"_hs)
    538  .prop(std::make_pair("tooltip"_hs, "Member"))
    539  .prop(my_enum::a_value, 42);
    540 ```
    541 
    542 Alternatively, the `props` function is available to associate several properties
    543 at a time. However, in this case properties in the key/value form aren't
    544 allowed, since they would be interpreted as two different properties rather than
    545 a single one.
    546 
    547 The meta objects for which properties are supported are currently the meta
    548 types, meta constructors, meta data and meta functions. It's not possible to
    549 attach properties to other types of meta objects and the factory returned as a
    550 result of their construction won't allow such an operation.
    551 
    552 These types offer a couple of member functions named `prop` to iterate all
    553 properties at once or to search a specific property by key:
    554 
    555 ```cpp
    556 // iterate all properties of a meta type
    557 entt::resolve<my_type>().prop([](auto prop) {
    558  // ...
    559 });
    560 
    561 // search for a given property by name
    562 auto prop = entt::resolve<my_type>().prop("tooltip"_hs);
    563 ```
    564 
    565 Meta properties are objects having a fairly poor interface, all in all. They
    566 only provide the `key` and the `value` member functions to be used to retrieve
    567 the key and the value contained in the form of `meta_any` objects, respectively.
    568 
    569 ## Unregister types
    570 
    571 A type registered with the reflection system can also be unregistered. This
    572 means unregistering all its data members, member functions, conversion functions
    573 and so on. However, the base classes won't be unregistered, since they don't
    574 necessarily depend on it. Similarly, implicitly generated types (as an example,
    575 the meta types implicitly generated for function parameters when needed) won't
    576 be unregistered.<br/>
    577 Roughly speaking, unregistering a type means disconnecting all associated meta
    578 objects from it and making its identifier no longer visible. The underlying node
    579 will remain available though, as if it were implicitly generated:
    580 
    581 ```cpp
    582 entt::meta<my_type>().reset();
    583 ```
    584 
    585 The type can be re-registered later with a completely different name and form.
    - - - - diff --git a/monostate_8hpp_source.html b/monostate_8hpp_source.html index fec08de7d..3d7596103 100644 --- a/monostate_8hpp_source.html +++ b/monostate_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/core/monostate.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    monostate.hpp
    -
    1 #ifndef ENTT_CORE_MONOSTATE_HPP
    2 #define ENTT_CORE_MONOSTATE_HPP
    3 
    4 
    5 #include <cassert>
    6 #include "../config/config.h"
    7 
    8 
    9 namespace entt {
    10 
    11 
    23 template<ENTT_ID_TYPE>
    24 struct monostate {
    30  template<typename Type>
    31  void operator=(Type val) const ENTT_NOEXCEPT {
    32  value<Type> = val;
    33  }
    34 
    40  template<typename Type>
    41  operator Type() const ENTT_NOEXCEPT {
    42  return value<Type>;
    43  }
    44 
    45 private:
    46  template<typename Type>
    47  inline static ENTT_MAYBE_ATOMIC(Type) value{};
    48 };
    49 
    50 
    55 template<ENTT_ID_TYPE Value>
    57 
    58 
    59 }
    60 
    61 
    62 #endif // ENTT_CORE_MONOSTATE_HPP
    monostate< Value > monostate_v
    Helper variable template.
    Definition: monostate.hpp:56
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    void operator=(Type val) const ENTT_NOEXCEPT
    Assigns a value of a specific type to a given key.
    Definition: monostate.hpp:31
    -
    Minimal implementation of the monostate pattern.
    Definition: monostate.hpp:24
    +
    1 #ifndef ENTT_CORE_MONOSTATE_HPP
    +
    2 #define ENTT_CORE_MONOSTATE_HPP
    +
    3 
    +
    4 
    +
    5 #include <cassert>
    +
    6 #include "../config/config.h"
    +
    7 
    +
    8 
    +
    9 namespace entt {
    +
    10 
    +
    11 
    +
    23 template<ENTT_ID_TYPE>
    +
    24 struct monostate {
    +
    30  template<typename Type>
    +
    31  void operator=(Type val) const ENTT_NOEXCEPT {
    +
    32  value<Type> = val;
    +
    33  }
    +
    34 
    +
    40  template<typename Type>
    +
    41  operator Type() const ENTT_NOEXCEPT {
    +
    42  return value<Type>;
    +
    43  }
    +
    44 
    +
    45 private:
    +
    46  template<typename Type>
    +
    47  inline static ENTT_MAYBE_ATOMIC(Type) value{};
    +
    48 };
    +
    49 
    +
    50 
    +
    55 template<ENTT_ID_TYPE Value>
    + +
    57 
    +
    58 
    +
    59 }
    +
    60 
    +
    61 
    +
    62 #endif // ENTT_CORE_MONOSTATE_HPP
    +
    Minimal implementation of the monostate pattern.
    Definition: monostate.hpp:24
    +
    void operator=(Type val) const ENTT_NOEXCEPT
    Assigns a value of a specific type to a given key.
    Definition: monostate.hpp:31
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    monostate< Value > monostate_v
    Helper variable template.
    Definition: monostate.hpp:56
    diff --git a/namespaceentt.html b/namespaceentt.html index 5419371fb..c9e7ca053 100644 --- a/namespaceentt.html +++ b/namespaceentt.html @@ -1,9 +1,9 @@ - + - + EnTT: entt Namespace Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */

    EnTT default namespace. -More...

    +More...

    @@ -212,8 +215,8 @@ Classes - - + + @@ -360,15 +363,15 @@ using  - + - + - + @@ -396,7 +399,7 @@ using  - + @@ -404,34 +407,34 @@ using  - + - +

    Classes

    struct  is_equality_comparable
     Provides the member constant value to true if a given type is equality comparable, false otherwise. More...
     
    struct  is_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> >
     Provides the member constant value to true if a given type is equality comparable, false otherwise. More...
    struct  is_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> >
     Provides the member constant value to true if a given type is equality comparable, false otherwise. More...
     
    struct  is_named_type
     Provides the member constant value to true if a given type has a name. In all other cases, value is false. More...
     
    template<typename... List>
    using type_list_cat_t = typename type_list_cat< List... >::type
     Helper type. More...
     Helper type. More...
     
    template<typename Type >
    using type_list_unique_t = typename type_list_unique< Type >::type
     Helper type. More...
     Helper type. More...
     
    template<typename Type >
    using named_type_traits_t = typename named_type_traits< Type >::type
     Helper type. More...
     Helper type. More...
     
    using registry = basic_registry< entity >
     
    template<typename... Types>
    using view = basic_view< entity, Types... >
     Alias declaration for the most common use case. More...
     Alias declaration for the most common use case. More...
     
    using runtime_view = basic_runtime_view< entity >
     
    template<typename... Types>
    using group = basic_group< entity, Types... >
     Alias declaration for the most common use case. More...
     Alias declaration for the most common use case. More...
     
    template<ENTT_ID_TYPE Value>
    using tag = std::integral_constant< ENTT_ID_TYPE, Value >
     Alias template to ease the assignment of tags to entities. More...
     Alias template to ease the assignment of tags to entities. More...
     
    - + - + - + - + - + @@ -443,111 +446,111 @@ Functions - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + + + + + + + + - +

    Functions

    template<typename Char , std::size_t N>
     basic_hashed_string (const Char(&str)[N]) ENTT_NOEXCEPT -> basic_hashed_string< Char >
     Deduction guide. More...
     Deduction guide. More...
     
    template<typename Char >
    constexpr bool operator!= (const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT
     Compares two hashed strings. More...
     Compares two hashed strings. More...
     
    template<typename Type , typename Class >
    constexpr auto overload (Type Class::*member) ENTT_NOEXCEPT
     Constant utility to disambiguate overloaded member functions. More...
     Constant utility to disambiguate overloaded member functions. More...
     
    template<typename Type >
    constexpr auto overload (Type *func) ENTT_NOEXCEPT
     Constant utility to disambiguate overloaded functions. More...
     Constant utility to disambiguate overloaded functions. More...
     
    template<class... Type>
     overloaded (Type...) -> overloaded< Type... >
     Deduction guide. More...
     Deduction guide. More...
     
     ENTT_OPAQUE_TYPE (entity, ENTT_ID_TYPE)
     
    template<typename Entity >
     as_view (basic_registry< Entity > &) ENTT_NOEXCEPT -> as_view< false, Entity >
     Deduction guide. More...
     Deduction guide. More...
     
    template<typename Entity >
     as_view (const basic_registry< Entity > &) ENTT_NOEXCEPT -> as_view< true, Entity >
     Deduction guide. More...
     Deduction guide. More...
     
    template<typename Entity >
     as_group (basic_registry< Entity > &) ENTT_NOEXCEPT -> as_group< false, Entity >
     Deduction guide. More...
     Deduction guide. More...
     
    template<typename Entity >
     as_group (const basic_registry< Entity > &) ENTT_NOEXCEPT -> as_group< true, Entity >
     Deduction guide. More...
     Deduction guide. More...
     
    template<typename Type >
    meta_factory< Type > meta () ENTT_NOEXCEPT
     Utility function to use for reflection. More...
     Utility function to use for reflection. More...
     
    template<typename Type >
    meta_type resolve () ENTT_NOEXCEPT
     Returns the meta type associated with a given type. More...
     Returns the meta type associated with a given type. More...
     
    meta_type resolve (const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT
     Returns the meta type associated with a given identifier. More...
     Returns the meta type associated with a given identifier. More...
     
    template<typename Op >
    std::enable_if_t< std::is_invocable_v< Op, meta_type >, void > resolve (Op op) ENTT_NOEXCEPT
     Iterates all the reflected types. More...
     Iterates all the reflected types. More...
     
    bool operator!= (const meta_any &lhs, const meta_any &rhs) ENTT_NOEXCEPT
     Checks if two containers differ in their content. More...
     Checks if two containers differ in their content. More...
     
    bool operator!= (const meta_prop &lhs, const meta_prop &rhs) ENTT_NOEXCEPT
     Checks if two meta objects refer to the same node. More...
     Checks if two meta objects refer to the same node. More...
     
    bool operator!= (const meta_base &lhs, const meta_base &rhs) ENTT_NOEXCEPT
     Checks if two meta objects refer to the same node. More...
     Checks if two meta objects refer to the same node. More...
     
    bool operator!= (const meta_conv &lhs, const meta_conv &rhs) ENTT_NOEXCEPT
     Checks if two meta objects refer to the same node. More...
     Checks if two meta objects refer to the same node. More...
     
    bool operator!= (const meta_ctor &lhs, const meta_ctor &rhs) ENTT_NOEXCEPT
     Checks if two meta objects refer to the same node. More...
     Checks if two meta objects refer to the same node. More...
     
    bool operator!= (const meta_dtor &lhs, const meta_dtor &rhs) ENTT_NOEXCEPT
     Checks if two meta objects refer to the same node. More...
     Checks if two meta objects refer to the same node. More...
     
    bool operator!= (const meta_data &lhs, const meta_data &rhs) ENTT_NOEXCEPT
     Checks if two meta objects refer to the same node. More...
     Checks if two meta objects refer to the same node. More...
     
    bool operator!= (const meta_func &lhs, const meta_func &rhs) ENTT_NOEXCEPT
     Checks if two meta objects refer to the same node. More...
     Checks if two meta objects refer to the same node. More...
     
    bool operator!= (const meta_type &lhs, const meta_type &rhs) ENTT_NOEXCEPT
     Checks if two meta objects refer to the same node. More...
     Checks if two meta objects refer to the same node. More...
     
    template<typename Ret , typename... Args>
    bool operator!= (const delegate< Ret(Args...)> &lhs, const delegate< Ret(Args...)> &rhs) ENTT_NOEXCEPT
     Compares the contents of two delegates. More...
     Compares the contents of two delegates. More...
     
    template<auto Function>
     delegate (connect_arg_t< Function >) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>
     Deduction guide. More...
     Deduction guide. More...
     
    template<auto Candidate, typename Type >
     delegate (connect_arg_t< Candidate >, Type &) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type *>>>
     Deduction guide. More...
     
    template<auto Candidate, typename Type >
     delegate (connect_arg_t< Candidate >, Type *) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type *>>>
     Deduction guide. More...
     
    template<auto Candidate, typename Type >
     delegate (connect_arg_t< Candidate >, Type &) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type * >>>
     Deduction guide. More...
     
    template<auto Candidate, typename Type >
     delegate (connect_arg_t< Candidate >, Type *) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type * >>>
     Deduction guide. More...
     
    template<typename Ret , typename... Args>
     sink (sigh< Ret(Args...)> &) ENTT_NOEXCEPT -> sink< Ret(Args...)>
     Deduction guide. More...
     Deduction guide. More...
     
    - + - + - + - + - + - + - + @@ -555,11 +558,11 @@ constexpr basic_collect - + - + @@ -568,7 +571,7 @@ constexpr as_alias_t - +

    Variables

    template<ENTT_ID_TYPE Value>
    monostate< Value > monostate_v = {}
     Helper variable template. More...
     Helper variable template. More...
     
    template<std::size_t N>
    constexpr choice_t< N > choice {}
     Variable template for the choice trick. More...
     Variable template for the choice trick. More...
     
    template<class List >
    constexpr auto type_list_size_v = type_list_size<List>::value
     Helper variable template. More...
     Helper variable template. More...
     
    template<class Type >
    constexpr auto is_equality_comparable_v = is_equality_comparable<Type>::value
     Helper variable template. More...
     Helper variable template. More...
     
    template<class Type >
    constexpr auto named_type_traits_v = named_type_traits<Type>::value
     Helper variable template. More...
     Helper variable template. More...
     
    template<class Type >
    constexpr auto is_named_type_v = is_named_type<Type>::value
     Helper variable template. More...
     Helper variable template. More...
     
    constexpr auto null = internal::null{}
     Compile-time constant for null entities. More...
     Compile-time constant for null entities. More...
     
    constexpr basic_collector collector {}
     
    template<typename... Type>
    constexpr exclude_t< Type... > exclude {}
     Variable template for exclusion lists. More...
     Variable template for exclusion lists. More...
     
    template<typename... Type>
    constexpr get_t< Type... > get {}
     Variable template for lists of observed components. More...
     Variable template for lists of observed components. More...
     
    constexpr as_alias_t as_alias
    template<auto Func>
    constexpr connect_arg_t< Func > connect_arg {}
     Constant of type connect_arg_t used to disambiguate calls.
     Constant of type connect_arg_t used to disambiguate calls.
     

    Detailed Description

    @@ -641,8 +644,10 @@ template<ENTT_ID_TYPE Value>

    Alias template to ease the assignment of tags to entities.

    -

    If used in combination with hashed strings, it simplifies the assignment of tags to entities and the use of tags in general where a type would be required otherwise.
    - As an example and where the user defined literal for hashed strings hasn't been changed:

    registry.assign<entt::tag<"enemy"_hs>>(entity);
    Note
    Tags are empty components and therefore candidates for the empty component optimization.
    +

    If used in combination with hashed strings, it simplifies the assignment of tags to entities and the use of tags in general where a type would be required otherwise.
    + As an example and where the user defined literal for hashed strings hasn't been changed:

    +
    registry.assign<entt::tag<"enemy"_hs>>(entity);
    +
    Note
    Tags are empty components and therefore candidates for the empty component optimization.
    Template Parameters
    @@ -755,7 +760,7 @@ template<typename Entity >

    It allows to deduce the constness of a registry directly from the instance provided to the constructor.

    Template Parameters
    ValueThe numeric representation of an instance of hashed string.
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -784,7 +789,7 @@ template<typename Entity >

    It allows to deduce the constness of a registry directly from the instance provided to the constructor.

    Template Parameters
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -813,7 +818,7 @@ template<typename Entity >

    It allows to deduce the constness of a registry directly from the instance provided to the constructor.

    Template Parameters
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -842,7 +847,7 @@ template<typename Entity >

    It allows to deduce the constness of a registry directly from the instance provided to the constructor.

    Template Parameters
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -885,37 +890,8 @@ template<typename Char , std::size_t N> - -

    ◆ delegate() [1/3]

    - -
    -
    -
    -template<auto Function>
    - - - - - - - - -
    entt::delegate (connect_arg_t< Function > ) -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>
    -
    - -

    Deduction guide.

    -

    It allows to deduce the function type of the delegate directly from a function provided to the constructor.

    -
    Template Parameters
    - - -
    FunctionA valid free function pointer.
    -
    -
    - -
    -
    - -

    ◆ delegate() [2/3]

    + +

    ◆ delegate() [1/3]

    @@ -937,7 +913,7 @@ template<auto Candidate, typename Type >
    ) - -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type *>>> + -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type * >>>
    @@ -954,8 +930,8 @@ template<auto Candidate, typename Type >
    - -

    ◆ delegate() [3/3]

    + +

    ◆ delegate() [2/3]

    @@ -977,7 +953,7 @@ template<auto Candidate, typename Type >
    ) - -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type *>>> + -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type * >>>
    @@ -992,6 +968,35 @@ template<auto Candidate, typename Type >
    + + + +

    ◆ delegate() [3/3]

    + +
    +
    +
    +template<auto Function>
    + + + + + + + + +
    entt::delegate (connect_arg_t< Function > ) -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>
    +
    + +

    Deduction guide.

    +

    It allows to deduce the function type of the delegate directly from a function provided to the constructor.

    +
    Template Parameters
    + + +
    FunctionA valid free function pointer.
    +
    +
    +
    @@ -1020,7 +1025,7 @@ template<typename Type >

    Utility function to use for reflection.

    -

    This is the point from which everything starts.
    +

    This is the point from which everything starts.
    By invoking this function with a type that is not yet reflected, a meta type is created to which it will be possible to attach meta objects through a dedicated factory.

    Template Parameters
    @@ -1041,6 +1046,9 @@ template<typename Type >
    template<typename Char >
    +
    + + + + +
    @@ -1060,6 +1068,11 @@ template<typename Char >
    constexpr bool entt::operator!=
    +
    +constexpr

    Compares two hashed strings.

    @@ -1175,60 +1188,12 @@ template<typename Ret , typename... Args>
    Returns
    True if the two containers differ in their content, false otherwise.
    -

    Definition at line 765 of file meta.hpp.

    - - - - -

    ◆ operator!=() [4/11]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool entt::operator!= (const meta_proplhs,
    const meta_proprhs 
    )
    -
    -inline
    -
    - -

    Checks if two meta objects refer to the same node.

    -
    Parameters
    - - - -
    lhsA meta object, either valid or not.
    rhsA meta object, either valid or not.
    -
    -
    -
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    - -

    Definition at line 825 of file meta.hpp.

    +

    Definition at line 764 of file meta.hpp.

    -

    ◆ operator!=() [5/11]

    +

    ◆ operator!=() [4/11]

    @@ -1271,12 +1236,12 @@ template<typename Ret , typename... Args>
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 874 of file meta.hpp.

    +

    Definition at line 873 of file meta.hpp.

    -

    ◆ operator!=() [6/11]

    +

    ◆ operator!=() [5/11]

    @@ -1319,12 +1284,12 @@ template<typename Ret , typename... Args>
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 920 of file meta.hpp.

    +

    Definition at line 919 of file meta.hpp.

    -

    ◆ operator!=() [7/11]

    +

    ◆ operator!=() [6/11]

    @@ -1367,7 +1332,55 @@ template<typename Ret , typename... Args>
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 1017 of file meta.hpp.

    +

    Definition at line 1016 of file meta.hpp.

    + +
    + + +

    ◆ operator!=() [7/11]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool entt::operator!= (const meta_datalhs,
    const meta_datarhs 
    )
    +
    +inline
    +
    + +

    Checks if two meta objects refer to the same node.

    +
    Parameters
    + + + +
    lhsA meta object, either valid or not.
    rhsA meta object, either valid or not.
    +
    +
    +
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    + +

    Definition at line 1216 of file meta.hpp.

    @@ -1415,60 +1428,12 @@ template<typename Ret , typename... Args>
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 1065 of file meta.hpp.

    - - - - -

    ◆ operator!=() [9/11]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool entt::operator!= (const meta_datalhs,
    const meta_datarhs 
    )
    -
    -inline
    -
    - -

    Checks if two meta objects refer to the same node.

    -
    Parameters
    - - - -
    lhsA meta object, either valid or not.
    rhsA meta object, either valid or not.
    -
    -
    -
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    - -

    Definition at line 1217 of file meta.hpp.

    +

    Definition at line 1064 of file meta.hpp.

    -

    ◆ operator!=() [10/11]

    +

    ◆ operator!=() [9/11]

    @@ -1511,7 +1476,55 @@ template<typename Ret , typename... Args>
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 1350 of file meta.hpp.

    +

    Definition at line 1349 of file meta.hpp.

    + +
    + + +

    ◆ operator!=() [10/11]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool entt::operator!= (const meta_proplhs,
    const meta_proprhs 
    )
    +
    +inline
    +
    + +

    Checks if two meta objects refer to the same node.

    +
    Parameters
    + + + +
    lhsA meta object, either valid or not.
    rhsA meta object, either valid or not.
    +
    +
    +
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    + +

    Definition at line 824 of file meta.hpp.

    @@ -1559,17 +1572,65 @@ template<typename Ret , typename... Args>
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 1768 of file meta.hpp.

    +

    Definition at line 1767 of file meta.hpp.

    + + + + +

    ◆ overload() [1/2]

    + +
    +
    +
    +template<typename Type >
    + + + + + +
    + + + + + + + + +
    constexpr auto entt::overload (Type * func)
    +
    +constexpr
    +
    + +

    Constant utility to disambiguate overloaded functions.

    +
    Template Parameters
    + + +
    TypeFunction type of the desired overload.
    +
    +
    +
    Parameters
    + + +
    funcA valid pointer to a function.
    +
    +
    +
    Returns
    Pointer to the function.
    + +

    Definition at line 44 of file utility.hpp.

    -

    ◆ overload() [1/2]

    +

    ◆ overload() [2/2]

    template<typename Type , typename Class >
    + + + + + +
    @@ -1579,6 +1640,11 @@ template<typename Type , typename Class >
    constexpr auto entt::overload
    +
    +constexpr

    Constant utility to disambiguate overloaded member functions.

    @@ -1599,43 +1665,6 @@ template<typename Type , typename Class >

    Definition at line 34 of file utility.hpp.

    -
    - - -

    ◆ overload() [2/2]

    - -
    -
    -
    -template<typename Type >
    - - - - - - - - -
    constexpr auto entt::overload (Type * func)
    -
    - -

    Constant utility to disambiguate overloaded functions.

    -
    Template Parameters
    - - -
    TypeFunction type of the desired overload.
    -
    -
    -
    Parameters
    - - -
    funcA valid pointer to a function.
    -
    -
    -
    Returns
    Pointer to the function.
    - -

    Definition at line 44 of file utility.hpp.

    -
    @@ -1823,11 +1852,19 @@ template<typename Ret , typename... Args>
    template<std::size_t N>
    + + + + + +
    constexpr choice_t<N> entt::choice {}
    +
    +constexpr

    Variable template for the choice trick.

    @@ -1849,11 +1886,19 @@ template<std::size_t N>
    template<typename... Type>
    + + + + + +
    constexpr exclude_t<Type...> entt::exclude {}
    +
    +constexpr

    Variable template for exclusion lists.

    @@ -1875,11 +1920,19 @@ template<typename... Type>
    template<typename... Type>
    + + + + + +
    constexpr get_t<Type...> entt::get {}
    +
    +constexpr

    Variable template for lists of observed components.

    @@ -1901,11 +1954,19 @@ template<typename... Type>
    template<class Type >
    + + + + + +
    constexpr auto entt::is_equality_comparable_v = is_equality_comparable<Type>::value
    +
    +constexpr

    Helper variable template.

    @@ -1927,11 +1988,19 @@ template<class Type >
    template<class Type >
    + + + + + +
    constexpr auto entt::is_named_type_v = is_named_type<Type>::value
    +
    +constexpr

    Helper variable template.

    @@ -1987,11 +2056,19 @@ template<ENTT_ID_TYPE Value>
    template<class Type >
    + + + + + +
    constexpr auto entt::named_type_traits_v = named_type_traits<Type>::value
    +
    +constexpr

    Helper variable template.

    @@ -2011,11 +2088,19 @@ template<class Type >
    + + + + + +
    constexpr auto entt::null = internal::null{}
    +
    +constexpr

    Compile-time constant for null entities.

    @@ -2032,11 +2117,19 @@ template<class Type >
    template<class List >
    + + + + + +
    constexpr auto entt::type_list_size_v = type_list_size<List>::value
    +
    +constexpr

    Helper variable template.

    @@ -2052,11 +2145,14 @@ template<class List >
    +
    entt::registry
    basic_registry< entity > registry
    Alias declaration for the most common use case.
    Definition: fwd.hpp:54
    +
    entt::tag
    std::integral_constant< ENTT_ID_TYPE, Value > tag
    Alias template to ease the assignment of tags to entities.
    Definition: helper.hpp:133
    +
    entt::basic_registry
    Fast and reliable entity-component system.
    Definition: fwd.hpp:13
    diff --git a/namespacemembers.html b/namespacemembers.html index d89c5ee10..322c2245f 100644 --- a/namespacemembers.html +++ b/namespacemembers.html @@ -1,9 +1,9 @@ - + - + EnTT: Namespace Members @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ @@ -238,7 +241,7 @@ $(function() { diff --git a/namespacemembers_func.html b/namespacemembers_func.html index c7bc028cb..c2c0da764 100644 --- a/namespacemembers_func.html +++ b/namespacemembers_func.html @@ -1,9 +1,9 @@ - + - + EnTT: Namespace Members @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ @@ -99,7 +102,7 @@ $(function() { diff --git a/namespacemembers_type.html b/namespacemembers_type.html index 1f9e6b3cb..0620072b5 100644 --- a/namespacemembers_type.html +++ b/namespacemembers_type.html @@ -1,9 +1,9 @@ - + - + EnTT: Namespace Members @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ @@ -111,7 +114,7 @@ $(function() { diff --git a/namespacemembers_vars.html b/namespacemembers_vars.html index 349832128..dc993ce66 100644 --- a/namespacemembers_vars.html +++ b/namespacemembers_vars.html @@ -1,9 +1,9 @@ - + - + EnTT: Namespace Members @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ @@ -102,7 +105,7 @@ $(function() { diff --git a/namespaces.html b/namespaces.html index 70c307225..a294c68ce 100644 --- a/namespaces.html +++ b/namespaces.html @@ -1,9 +1,9 @@ - + - + EnTT: Namespace List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ @@ -73,7 +76,7 @@ $(function() { diff --git a/observer_8hpp_source.html b/observer_8hpp_source.html index 6c2c0b6fa..c84ecc3fd 100644 --- a/observer_8hpp_source.html +++ b/observer_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/entity/observer.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */
    observer.hpp
    -
    1 #ifndef ENTT_ENTITY_OBSERVER_HPP
    2 #define ENTT_ENTITY_OBSERVER_HPP
    3 
    4 
    5 #include <limits>
    6 #include <cstddef>
    7 #include <cstdint>
    8 #include <utility>
    9 #include <algorithm>
    10 #include <type_traits>
    11 #include "../config/config.h"
    12 #include "../core/type_traits.hpp"
    13 #include "registry.hpp"
    14 #include "storage.hpp"
    15 #include "entity.hpp"
    16 #include "fwd.hpp"
    17 
    18 
    19 namespace entt {
    20 
    21 
    23 template<typename...>
    24 struct matcher {};
    25 
    26 
    33 template<typename...>
    35 
    36 
    45 template<>
    53  template<typename... AllOf, typename... NoneOf>
    54  static constexpr auto group(exclude_t<NoneOf...> = {}) ENTT_NOEXCEPT {
    55  return basic_collector<matcher<type_list<>, type_list<>, type_list<NoneOf...>, AllOf...>>{};
    56  }
    57 
    63  template<typename AnyOf>
    64  static constexpr auto replace() ENTT_NOEXCEPT {
    66  }
    67 };
    68 
    77 template<typename... Reject, typename... Require, typename... Rule, typename... Other>
    78 struct basic_collector<matcher<type_list<Reject...>, type_list<Require...>, Rule...>, Other...> {
    80  using current_type = matcher<type_list<Reject...>, type_list<Require...>, Rule...>;
    81 
    88  template<typename... AllOf, typename... NoneOf>
    89  static constexpr auto group(exclude_t<NoneOf...> = {}) ENTT_NOEXCEPT {
    90  return basic_collector<matcher<type_list<>, type_list<>, type_list<NoneOf...>, AllOf...>, current_type, Other...>{};
    91  }
    92 
    98  template<typename AnyOf>
    99  static constexpr auto replace() ENTT_NOEXCEPT {
    100  return basic_collector<matcher<type_list<>, type_list<>, AnyOf>, current_type, Other...>{};
    101  }
    102 
    109  template<typename... AllOf, typename... NoneOf>
    110  static constexpr auto where(exclude_t<NoneOf...> = {}) ENTT_NOEXCEPT {
    111  using extended_type = matcher<type_list<Reject..., NoneOf...>, type_list<Require..., AllOf...>, Rule...>;
    112  return basic_collector<extended_type, Other...>{};
    113  }
    114 };
    115 
    116 
    119 
    120 
    170 template<typename Entity>
    171 class basic_observer {
    172  using payload_type = std::uint32_t;
    173 
    174  template<typename>
    175  struct matcher_handler;
    176 
    177  template<typename... Reject, typename... Require, typename AnyOf>
    178  struct matcher_handler<matcher<type_list<Reject...>, type_list<Require...>, AnyOf>> {
    179  template<std::size_t Index>
    180  static void maybe_valid_if(basic_observer &obs, const Entity entt, const basic_registry<Entity> &reg) {
    181  if(reg.template has<Require...>(entt) && !(reg.template has<Reject>(entt) || ...)) {
    182  auto *comp = obs.view.try_get(entt);
    183  (comp ? *comp : obs.view.construct(entt)) |= (1 << Index);
    184  }
    185  }
    186 
    187  template<std::size_t Index>
    188  static void discard_if(basic_observer &obs, const Entity entt) {
    189  if(auto *value = obs.view.try_get(entt); value && !(*value &= (~(1 << Index)))) {
    190  obs.view.destroy(entt);
    191  }
    192  }
    193 
    194  template<std::size_t Index>
    195  static void connect(basic_observer &obs, basic_registry<Entity> &reg) {
    196  (reg.template on_destroy<Require>().template connect<&discard_if<Index>>(obs), ...);
    197  (reg.template on_construct<Reject>().template connect<&discard_if<Index>>(obs), ...);
    198  reg.template on_replace<AnyOf>().template connect<&maybe_valid_if<Index>>(obs);
    199  reg.template on_destroy<AnyOf>().template connect<&discard_if<Index>>(obs);
    200  }
    201 
    202  static void disconnect(basic_observer &obs, basic_registry<Entity> &reg) {
    203  (reg.template on_destroy<Require>().disconnect(obs), ...);
    204  (reg.template on_construct<Reject>().disconnect(obs), ...);
    205  reg.template on_replace<AnyOf>().disconnect(obs);
    206  reg.template on_destroy<AnyOf>().disconnect(obs);
    207  }
    208  };
    209 
    210  template<typename... Reject, typename... Require, typename... NoneOf, typename... AllOf>
    211  struct matcher_handler<matcher<type_list<Reject...>, type_list<Require...>, type_list<NoneOf...>, AllOf...>> {
    212  template<std::size_t Index>
    213  static void maybe_valid_if(basic_observer &obs, const Entity entt, const basic_registry<Entity> &reg) {
    214  if(reg.template has<AllOf...>(entt) && !(reg.template has<NoneOf>(entt) || ...)
    215  && reg.template has<Require...>(entt) && !(reg.template has<Reject>(entt) || ...))
    216  {
    217  auto *comp = obs.view.try_get(entt);
    218  (comp ? *comp : obs.view.construct(entt)) |= (1 << Index);
    219  }
    220  }
    221 
    222  template<std::size_t Index>
    223  static void discard_if(basic_observer &obs, const Entity entt) {
    224  if(auto *value = obs.view.try_get(entt); value && !(*value &= (~(1 << Index)))) {
    225  obs.view.destroy(entt);
    226  }
    227  }
    228 
    229  template<std::size_t Index>
    230  static void connect(basic_observer &obs, basic_registry<Entity> &reg) {
    231  (reg.template on_destroy<Require>().template connect<&discard_if<Index>>(obs), ...);
    232  (reg.template on_construct<Reject>().template connect<&discard_if<Index>>(obs), ...);
    233  (reg.template on_construct<AllOf>().template connect<&maybe_valid_if<Index>>(obs), ...);
    234  (reg.template on_destroy<NoneOf>().template connect<&maybe_valid_if<Index>>(obs), ...);
    235  (reg.template on_destroy<AllOf>().template connect<&discard_if<Index>>(obs), ...);
    236  (reg.template on_construct<NoneOf>().template connect<&discard_if<Index>>(obs), ...);
    237  }
    238 
    239  static void disconnect(basic_observer &obs, basic_registry<Entity> &reg) {
    240  (reg.template on_destroy<Require>().disconnect(obs), ...);
    241  (reg.template on_construct<Reject>().disconnect(obs), ...);
    242  (reg.template on_construct<AllOf>().disconnect(obs), ...);
    243  (reg.template on_destroy<NoneOf>().disconnect(obs), ...);
    244  (reg.template on_destroy<AllOf>().disconnect(obs), ...);
    245  (reg.template on_construct<NoneOf>().disconnect(obs), ...);
    246  }
    247  };
    248 
    249  template<typename... Matcher>
    250  static void disconnect(basic_observer &obs, basic_registry<Entity> &reg) {
    251  (matcher_handler<Matcher>::disconnect(obs, reg), ...);
    252  }
    253 
    254  template<typename... Matcher, std::size_t... Index>
    255  void connect(basic_registry<Entity> &reg, std::index_sequence<Index...>) {
    256  static_assert(sizeof...(Matcher) < std::numeric_limits<payload_type>::digits);
    257  (matcher_handler<Matcher>::template connect<Index>(*this, reg), ...);
    258  release = &basic_observer::disconnect<Matcher...>;
    259  }
    260 
    261 public:
    263  using entity_type = Entity;
    265  using size_type = std::size_t;
    268 
    270  basic_observer() ENTT_NOEXCEPT
    271  : target{}, release{}, view{}
    272  {}
    273 
    275  basic_observer(const basic_observer &) = delete;
    277  basic_observer(basic_observer &&) = delete;
    278 
    284  template<typename... Matcher>
    286  : target{&reg},
    287  release{},
    288  view{}
    289  {
    290  connect<Matcher...>(reg, std::index_sequence_for<Matcher...>{});
    291  }
    292 
    294  ~basic_observer() = default;
    295 
    300  basic_observer & operator=(const basic_observer &) = delete;
    301 
    306  basic_observer & operator=(basic_observer &&) = delete;
    307 
    313  template<typename... Matcher>
    315  disconnect();
    316  connect<Matcher...>(reg, std::index_sequence_for<Matcher...>{});
    317  target = &reg;
    318  view.reset();
    319  }
    320 
    322  void disconnect() {
    323  if(release) {
    324  release(*this, *target);
    325  release = nullptr;
    326  }
    327  }
    328 
    333  size_type size() const ENTT_NOEXCEPT {
    334  return view.size();
    335  }
    336 
    341  bool empty() const ENTT_NOEXCEPT {
    342  return view.empty();
    343  }
    344 
    357  const entity_type * data() const ENTT_NOEXCEPT {
    358  return view.data();
    359  }
    360 
    369  iterator_type begin() const ENTT_NOEXCEPT {
    370  return view.sparse_set<entity_type>::begin();
    371  }
    372 
    383  iterator_type end() const ENTT_NOEXCEPT {
    384  return view.sparse_set<entity_type>::end();
    385  }
    386 
    388  void clear() {
    389  view.reset();
    390  }
    391 
    406  template<typename Func>
    407  void each(Func func) const {
    408  static_assert(std::is_invocable_v<Func, entity_type>);
    409  std::for_each(begin(), end(), std::move(func));
    410  }
    411 
    426  template<typename Func>
    427  void each(Func func) {
    428  std::as_const(*this).each(std::move(func));
    429  clear();
    430  }
    431 
    432 private:
    434  void(* release)(basic_observer &, basic_registry<entity_type> &);
    436 };
    437 
    438 
    439 }
    440 
    441 
    442 #endif // ENTT_ENTITY_OBSERVER_HPP
    iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the first entity of the observer.
    Definition: observer.hpp:369
    -
    static constexpr auto group(exclude_t< NoneOf... >={}) ENTT_NOEXCEPT
    Adds a grouping matcher to the collector.
    Definition: observer.hpp:89
    -
    basic_observer() ENTT_NOEXCEPT
    Default constructor.
    Definition: observer.hpp:270
    - -
    const object_type * try_get(const entity_type entt) const ENTT_NOEXCEPT
    Returns a pointer to the object associated with an entity, if any.
    Definition: storage.hpp:294
    -
    void disconnect()
    Disconnects an observer from the registry it keeps track of.
    Definition: observer.hpp:322
    -
    object_type & construct(const entity_type entt, Args &&... args)
    Assigns an entity to a storage and constructs its object.
    Definition: storage.hpp:322
    -
    bool empty() const ENTT_NOEXCEPT
    Checks whether an observer is empty.
    Definition: observer.hpp:341
    -
    Grouping matcher.
    Definition: observer.hpp:24
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    typename sparse_set< Entity >::iterator_type iterator_type
    Input iterator type.
    Definition: observer.hpp:267
    -
    iterator_type end() const ENTT_NOEXCEPT
    Returns an iterator that is past the last entity of the observer.
    Definition: observer.hpp:383
    - -
    void each(Func func)
    Iterates entities and applies the given function object to them, then clears the observer.
    Definition: observer.hpp:427
    -
    constexpr basic_collector collector
    Variable template used to ease the definition of collectors.
    Definition: observer.hpp:118
    -
    const entity_type * data() const ENTT_NOEXCEPT
    Direct access to the list of entities of the observer.
    Definition: observer.hpp:357
    -
    Entity entity_type
    Underlying entity identifier.
    Definition: observer.hpp:263
    -
    Fast and reliable entity-component system.
    Definition: fwd.hpp:13
    -
    View.
    Definition: fwd.hpp:17
    -
    basic_observer(basic_registry< entity_type > &reg, basic_collector< Matcher... >) ENTT_NOEXCEPT
    Creates an observer and connects it to a given registry.
    Definition: observer.hpp:285
    -
    static constexpr auto where(exclude_t< NoneOf... >={}) ENTT_NOEXCEPT
    Updates the filter of the last added matcher.
    Definition: observer.hpp:110
    -
    void clear()
    Resets the underlying container.
    Definition: observer.hpp:388
    - -
    A class to use to push around lists of types, nothing more.
    Definition: type_traits.hpp:42
    -
    static constexpr auto replace() ENTT_NOEXCEPT
    Adds an observing matcher to the collector.
    Definition: observer.hpp:99
    -
    void connect(basic_registry< entity_type > &reg, basic_collector< Matcher... >)
    Connects an observer to a given registry.
    Definition: observer.hpp:314
    -
    static constexpr auto replace() ENTT_NOEXCEPT
    Adds an observing matcher to the collector.
    Definition: observer.hpp:64
    -
    Alias for exclusion lists.
    Definition: utility.hpp:16
    -
    static constexpr auto group(exclude_t< NoneOf... >={}) ENTT_NOEXCEPT
    Adds a grouping matcher to the collector.
    Definition: observer.hpp:54
    -
    std::size_t size_type
    Unsigned integer type.
    Definition: observer.hpp:265
    -
    basic_view< entity, Types... > view
    Alias declaration for the most common use case.
    Definition: fwd.hpp:76
    -
    void each(Func func) const
    Iterates entities and applies the given function object to them, then clears the observer.
    Definition: observer.hpp:407
    -
    size_type size() const ENTT_NOEXCEPT
    Returns the number of elements in an observer.
    Definition: observer.hpp:333
    -
    Observer.
    Definition: fwd.hpp:29
    -
    void destroy(const entity_type entt)
    Removes an entity from a storage and destroys its object.
    Definition: storage.hpp:379
    -
    iterator iterator_type
    Random access iterator type.
    Definition: sparse_set.hpp:182
    +
    1 #ifndef ENTT_ENTITY_OBSERVER_HPP
    +
    2 #define ENTT_ENTITY_OBSERVER_HPP
    +
    3 
    +
    4 
    +
    5 #include <limits>
    +
    6 #include <cstddef>
    +
    7 #include <cstdint>
    +
    8 #include <utility>
    +
    9 #include <algorithm>
    +
    10 #include <type_traits>
    +
    11 #include "../config/config.h"
    +
    12 #include "../core/type_traits.hpp"
    +
    13 #include "registry.hpp"
    +
    14 #include "storage.hpp"
    +
    15 #include "entity.hpp"
    +
    16 #include "fwd.hpp"
    +
    17 
    +
    18 
    +
    19 namespace entt {
    +
    20 
    +
    21 
    +
    23 template<typename...>
    +
    24 struct matcher {};
    +
    25 
    +
    26 
    +
    33 template<typename...>
    + +
    35 
    +
    36 
    +
    45 template<>
    + +
    53  template<typename... AllOf, typename... NoneOf>
    +
    54  static constexpr auto group(exclude_t<NoneOf...> = {}) ENTT_NOEXCEPT {
    +
    55  return basic_collector<matcher<type_list<>, type_list<>, type_list<NoneOf...>, AllOf...>>{};
    +
    56  }
    +
    57 
    +
    63  template<typename AnyOf>
    +
    64  static constexpr auto replace() ENTT_NOEXCEPT {
    + +
    66  }
    +
    67 };
    +
    68 
    +
    77 template<typename... Reject, typename... Require, typename... Rule, typename... Other>
    +
    78 struct basic_collector<matcher<type_list<Reject...>, type_list<Require...>, Rule...>, Other...> {
    +
    80  using current_type = matcher<type_list<Reject...>, type_list<Require...>, Rule...>;
    +
    81 
    +
    88  template<typename... AllOf, typename... NoneOf>
    +
    89  static constexpr auto group(exclude_t<NoneOf...> = {}) ENTT_NOEXCEPT {
    +
    90  return basic_collector<matcher<type_list<>, type_list<>, type_list<NoneOf...>, AllOf...>, current_type, Other...>{};
    +
    91  }
    +
    92 
    +
    98  template<typename AnyOf>
    +
    99  static constexpr auto replace() ENTT_NOEXCEPT {
    +
    100  return basic_collector<matcher<type_list<>, type_list<>, AnyOf>, current_type, Other...>{};
    +
    101  }
    +
    102 
    +
    109  template<typename... AllOf, typename... NoneOf>
    +
    110  static constexpr auto where(exclude_t<NoneOf...> = {}) ENTT_NOEXCEPT {
    +
    111  using extended_type = matcher<type_list<Reject..., NoneOf...>, type_list<Require..., AllOf...>, Rule...>;
    +
    112  return basic_collector<extended_type, Other...>{};
    +
    113  }
    +
    114 };
    +
    115 
    +
    116 
    + +
    119 
    +
    120 
    +
    170 template<typename Entity>
    +
    171 class basic_observer {
    +
    172  using payload_type = std::uint32_t;
    +
    173 
    +
    174  template<typename>
    +
    175  struct matcher_handler;
    +
    176 
    +
    177  template<typename... Reject, typename... Require, typename AnyOf>
    +
    178  struct matcher_handler<matcher<type_list<Reject...>, type_list<Require...>, AnyOf>> {
    +
    179  template<std::size_t Index>
    +
    180  static void maybe_valid_if(basic_observer &obs, const Entity entt, const basic_registry<Entity> &reg) {
    +
    181  if(reg.template has<Require...>(entt) && !(reg.template has<Reject>(entt) || ...)) {
    +
    182  auto *comp = obs.view.try_get(entt);
    +
    183  (comp ? *comp : obs.view.construct(entt)) |= (1 << Index);
    +
    184  }
    +
    185  }
    +
    186 
    +
    187  template<std::size_t Index>
    +
    188  static void discard_if(basic_observer &obs, const Entity entt) {
    +
    189  if(auto *value = obs.view.try_get(entt); value && !(*value &= (~(1 << Index)))) {
    +
    190  obs.view.destroy(entt);
    +
    191  }
    +
    192  }
    +
    193 
    +
    194  template<std::size_t Index>
    +
    195  static void connect(basic_observer &obs, basic_registry<Entity> &reg) {
    +
    196  (reg.template on_destroy<Require>().template connect<&discard_if<Index>>(obs), ...);
    +
    197  (reg.template on_construct<Reject>().template connect<&discard_if<Index>>(obs), ...);
    +
    198  reg.template on_replace<AnyOf>().template connect<&maybe_valid_if<Index>>(obs);
    +
    199  reg.template on_destroy<AnyOf>().template connect<&discard_if<Index>>(obs);
    +
    200  }
    +
    201 
    +
    202  static void disconnect(basic_observer &obs, basic_registry<Entity> &reg) {
    +
    203  (reg.template on_destroy<Require>().disconnect(obs), ...);
    +
    204  (reg.template on_construct<Reject>().disconnect(obs), ...);
    +
    205  reg.template on_replace<AnyOf>().disconnect(obs);
    +
    206  reg.template on_destroy<AnyOf>().disconnect(obs);
    +
    207  }
    +
    208  };
    +
    209 
    +
    210  template<typename... Reject, typename... Require, typename... NoneOf, typename... AllOf>
    +
    211  struct matcher_handler<matcher<type_list<Reject...>, type_list<Require...>, type_list<NoneOf...>, AllOf...>> {
    +
    212  template<std::size_t Index>
    +
    213  static void maybe_valid_if(basic_observer &obs, const Entity entt, const basic_registry<Entity> &reg) {
    +
    214  if(reg.template has<AllOf..., Require...>(entt) && !(reg.template has<NoneOf>(entt) || ...) && !(reg.template has<Reject>(entt) || ...)) {
    +
    215  auto *comp = obs.view.try_get(entt);
    +
    216  (comp ? *comp : obs.view.construct(entt)) |= (1 << Index);
    +
    217  }
    +
    218  }
    +
    219 
    +
    220  template<std::size_t Index>
    +
    221  static void discard_if(basic_observer &obs, const Entity entt) {
    +
    222  if(auto *value = obs.view.try_get(entt); value && !(*value &= (~(1 << Index)))) {
    +
    223  obs.view.destroy(entt);
    +
    224  }
    +
    225  }
    +
    226 
    +
    227  template<std::size_t Index>
    +
    228  static void connect(basic_observer &obs, basic_registry<Entity> &reg) {
    +
    229  (reg.template on_destroy<Require>().template connect<&discard_if<Index>>(obs), ...);
    +
    230  (reg.template on_construct<Reject>().template connect<&discard_if<Index>>(obs), ...);
    +
    231  (reg.template on_construct<AllOf>().template connect<&maybe_valid_if<Index>>(obs), ...);
    +
    232  (reg.template on_destroy<NoneOf>().template connect<&maybe_valid_if<Index>>(obs), ...);
    +
    233  (reg.template on_destroy<AllOf>().template connect<&discard_if<Index>>(obs), ...);
    +
    234  (reg.template on_construct<NoneOf>().template connect<&discard_if<Index>>(obs), ...);
    +
    235  }
    +
    236 
    +
    237  static void disconnect(basic_observer &obs, basic_registry<Entity> &reg) {
    +
    238  (reg.template on_destroy<Require>().disconnect(obs), ...);
    +
    239  (reg.template on_construct<Reject>().disconnect(obs), ...);
    +
    240  (reg.template on_construct<AllOf>().disconnect(obs), ...);
    +
    241  (reg.template on_destroy<NoneOf>().disconnect(obs), ...);
    +
    242  (reg.template on_destroy<AllOf>().disconnect(obs), ...);
    +
    243  (reg.template on_construct<NoneOf>().disconnect(obs), ...);
    +
    244  }
    +
    245  };
    +
    246 
    +
    247  template<typename... Matcher>
    +
    248  static void disconnect(basic_observer &obs, basic_registry<Entity> &reg) {
    +
    249  (matcher_handler<Matcher>::disconnect(obs, reg), ...);
    +
    250  }
    +
    251 
    +
    252  template<typename... Matcher, std::size_t... Index>
    +
    253  void connect(basic_registry<Entity> &reg, std::index_sequence<Index...>) {
    +
    254  static_assert(sizeof...(Matcher) < std::numeric_limits<payload_type>::digits);
    +
    255  (matcher_handler<Matcher>::template connect<Index>(*this, reg), ...);
    +
    256  release = &basic_observer::disconnect<Matcher...>;
    +
    257  }
    +
    258 
    +
    259 public:
    +
    261  using entity_type = Entity;
    +
    263  using size_type = std::size_t;
    + +
    266 
    +
    268  basic_observer() ENTT_NOEXCEPT
    +
    269  : target{}, release{}, view{}
    +
    270  {}
    +
    271 
    +
    273  basic_observer(const basic_observer &) = delete;
    +
    275  basic_observer(basic_observer &&) = delete;
    +
    276 
    +
    282  template<typename... Matcher>
    + +
    284  : target{&reg},
    +
    285  release{},
    +
    286  view{}
    +
    287  {
    +
    288  connect<Matcher...>(reg, std::index_sequence_for<Matcher...>{});
    +
    289  }
    +
    290 
    +
    292  ~basic_observer() = default;
    +
    293 
    +
    298  basic_observer & operator=(const basic_observer &) = delete;
    +
    299 
    +
    304  basic_observer & operator=(basic_observer &&) = delete;
    +
    305 
    +
    311  template<typename... Matcher>
    + +
    313  disconnect();
    +
    314  connect<Matcher...>(reg, std::index_sequence_for<Matcher...>{});
    +
    315  target = &reg;
    +
    316  view.reset();
    +
    317  }
    +
    318 
    +
    320  void disconnect() {
    +
    321  if(release) {
    +
    322  release(*this, *target);
    +
    323  release = nullptr;
    +
    324  }
    +
    325  }
    +
    326 
    +
    331  size_type size() const ENTT_NOEXCEPT {
    +
    332  return view.size();
    +
    333  }
    +
    334 
    +
    339  bool empty() const ENTT_NOEXCEPT {
    +
    340  return view.empty();
    +
    341  }
    +
    342 
    +
    355  const entity_type * data() const ENTT_NOEXCEPT {
    +
    356  return view.data();
    +
    357  }
    +
    358 
    +
    367  iterator_type begin() const ENTT_NOEXCEPT {
    +
    368  return view.sparse_set<entity_type>::begin();
    +
    369  }
    +
    370 
    +
    381  iterator_type end() const ENTT_NOEXCEPT {
    +
    382  return view.sparse_set<entity_type>::end();
    +
    383  }
    +
    384 
    +
    386  void clear() {
    +
    387  view.reset();
    +
    388  }
    +
    389 
    +
    404  template<typename Func>
    +
    405  void each(Func func) const {
    +
    406  static_assert(std::is_invocable_v<Func, entity_type>);
    +
    407  std::for_each(begin(), end(), std::move(func));
    +
    408  }
    +
    409 
    +
    424  template<typename Func>
    +
    425  void each(Func func) {
    +
    426  std::as_const(*this).each(std::move(func));
    +
    427  clear();
    +
    428  }
    +
    429 
    +
    430 private:
    + +
    432  void(* release)(basic_observer &, basic_registry<entity_type> &);
    + +
    434 };
    +
    435 
    +
    436 
    +
    437 }
    +
    438 
    +
    439 
    +
    440 #endif // ENTT_ENTITY_OBSERVER_HPP
    +
    Observer.
    Definition: fwd.hpp:29
    +
    A class to use to push around lists of types, nothing more.
    Definition: type_traits.hpp:42
    +
    Collector.
    Definition: observer.hpp:46
    +
    basic_observer() ENTT_NOEXCEPT
    Default constructor.
    Definition: observer.hpp:268
    +
    iterator_type end() const ENTT_NOEXCEPT
    Returns an iterator that is past the last entity of the observer.
    Definition: observer.hpp:381
    +
    Grouping matcher.
    Definition: observer.hpp:24
    +
    void each(Func func)
    Iterates entities and applies the given function object to them, then clears the observer.
    Definition: observer.hpp:425
    +
    bool empty() const ENTT_NOEXCEPT
    Checks whether an observer is empty.
    Definition: observer.hpp:339
    +
    Alias for exclusion lists.
    Definition: utility.hpp:16
    +
    Entity entity_type
    Underlying entity identifier.
    Definition: observer.hpp:261
    +
    iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the first entity of the observer.
    Definition: observer.hpp:367
    +
    static constexpr auto where(exclude_t< NoneOf... >={}) ENTT_NOEXCEPT
    Updates the filter of the last added matcher.
    Definition: observer.hpp:110
    +
    void each(Func func) const
    Iterates entities and applies the given function object to them, then clears the observer.
    Definition: observer.hpp:405
    +
    basic_observer(basic_registry< entity_type > &reg, basic_collector< Matcher... >) ENTT_NOEXCEPT
    Creates an observer and connects it to a given registry.
    Definition: observer.hpp:283
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    const entity_type * data() const ENTT_NOEXCEPT
    Direct access to the list of entities of the observer.
    Definition: observer.hpp:355
    +
    +
    Collector.
    Definition: observer.hpp:34
    +
    ~basic_observer()=default
    Default destructor.
    +
    constexpr basic_collector collector
    Variable template used to ease the definition of collectors.
    Definition: observer.hpp:118
    +
    std::size_t size_type
    Unsigned integer type.
    Definition: observer.hpp:263
    +
    static constexpr auto group(exclude_t< NoneOf... >={}) ENTT_NOEXCEPT
    Adds a grouping matcher to the collector.
    Definition: observer.hpp:89
    +
    +
    static constexpr auto group(exclude_t< NoneOf... >={}) ENTT_NOEXCEPT
    Adds a grouping matcher to the collector.
    Definition: observer.hpp:54
    +
    void clear()
    Resets the underlying container.
    Definition: observer.hpp:386
    +
    void connect(basic_registry< entity_type > &reg, basic_collector< Matcher... >)
    Connects an observer to a given registry.
    Definition: observer.hpp:312
    +
    static constexpr auto replace() ENTT_NOEXCEPT
    Adds an observing matcher to the collector.
    Definition: observer.hpp:64
    +
    View.
    Definition: fwd.hpp:17
    +
    static constexpr auto replace() ENTT_NOEXCEPT
    Adds an observing matcher to the collector.
    Definition: observer.hpp:99
    +
    basic_observer & operator=(const basic_observer &)=delete
    Default copy assignment operator, deleted on purpose.
    +
    size_type size() const ENTT_NOEXCEPT
    Returns the number of elements in an observer.
    Definition: observer.hpp:331
    +
    iterator iterator_type
    Random access iterator type.
    Definition: sparse_set.hpp:182
    +
    void disconnect()
    Disconnects an observer from the registry it keeps track of.
    Definition: observer.hpp:320
    +
    typename sparse_set< Entity >::iterator_type iterator_type
    Input iterator type.
    Definition: observer.hpp:265
    diff --git a/pages.html b/pages.html index 69c2cbb68..17ef757dd 100644 --- a/pages.html +++ b/pages.html @@ -1,9 +1,9 @@ - + - + EnTT: Related Pages @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ @@ -65,16 +68,16 @@ $(function() {
    Here is a list of all related documentation pages:
    - - - - - - - - - - + + + + + + + + + +
     Crash Course: core functionalities
     Crash Course: entity-component system
     Frequently Asked Questions
     Push EnTT across boundaries
     EnTT in Action
     Crash Course: service locator
     Crash Course: runtime reflection system
     Crash Course: cooperative scheduler
     Crash Course: resource management
     Crash Course: events, signals and everything in between
     Crash Course: core functionalities
     Crash Course: entity-component system
     Frequently Asked Questions
     Push EnTT across boundaries
     EnTT in Action
     Crash Course: service locator
     Crash Course: runtime reflection system
     Crash Course: cooperative scheduler
     Crash Course: resource management
     Crash Course: events, signals and everything in between
    @@ -82,7 +85,7 @@ $(function() { diff --git a/policy_8hpp_source.html b/policy_8hpp_source.html index 2f41c0ea9..07c1f63a8 100644 --- a/policy_8hpp_source.html +++ b/policy_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/meta/policy.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */
    policy.hpp
    -
    1 #ifndef ENTT_META_POLICY_HPP
    2 #define ENTT_META_POLICY_HPP
    3 
    4 
    5 namespace entt {
    6 
    7 
    9 struct as_alias_t {};
    10 
    11 
    13 constexpr as_alias_t as_alias;
    14 
    15 
    17 struct as_is_t {};
    18 
    19 
    21 struct as_void_t {};
    22 
    23 
    24 }
    25 
    26 
    27 #endif // ENTT_META_POLICY_HPP
    Empty class type used to request the as-is policy.
    Definition: policy.hpp:17
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    Empty class type used to request the as void policy.
    Definition: policy.hpp:21
    -
    Empty class type used to request the as alias policy.
    Definition: policy.hpp:9
    -
    constexpr as_alias_t as_alias
    Disambiguation tag.
    Definition: policy.hpp:13
    +
    1 #ifndef ENTT_META_POLICY_HPP
    +
    2 #define ENTT_META_POLICY_HPP
    +
    3 
    +
    4 
    +
    5 namespace entt {
    +
    6 
    +
    7 
    +
    9 struct as_alias_t {};
    +
    10 
    +
    11 
    +
    13 constexpr as_alias_t as_alias;
    +
    14 
    +
    15 
    +
    17 struct as_is_t {};
    +
    18 
    +
    19 
    +
    21 struct as_void_t {};
    +
    22 
    +
    23 
    +
    24 }
    +
    25 
    +
    26 
    +
    27 #endif // ENTT_META_POLICY_HPP
    +
    Empty class type used to request the as void policy.
    Definition: policy.hpp:21
    +
    Empty class type used to request the as-is policy.
    Definition: policy.hpp:17
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    constexpr as_alias_t as_alias
    Disambiguation tag.
    Definition: policy.hpp:13
    +
    Empty class type used to request the as alias policy.
    Definition: policy.hpp:9
    diff --git a/process_8hpp_source.html b/process_8hpp_source.html index ed4be7638..8412d015a 100644 --- a/process_8hpp_source.html +++ b/process_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/process/process.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    process.hpp
    -
    1 #ifndef ENTT_PROCESS_PROCESS_HPP
    2 #define ENTT_PROCESS_PROCESS_HPP
    3 
    4 
    5 #include <utility>
    6 #include <type_traits>
    7 #include "../config/config.h"
    8 
    9 
    10 namespace entt {
    11 
    12 
    72 template<typename Derived, typename Delta>
    73 class process {
    74  enum class state: unsigned int {
    75  UNINITIALIZED = 0,
    76  RUNNING,
    77  PAUSED,
    78  SUCCEEDED,
    79  FAILED,
    80  ABORTED,
    81  FINISHED
    82  };
    83 
    84  template<state value>
    85  using state_value_t = std::integral_constant<state, value>;
    86 
    87  template<typename Target = Derived>
    88  auto tick(int, state_value_t<state::UNINITIALIZED>)
    89  -> decltype(std::declval<Target>().init()) {
    90  static_cast<Target *>(this)->init();
    91  }
    92 
    93  template<typename Target = Derived>
    94  auto tick(int, state_value_t<state::RUNNING>, Delta delta, void *data)
    95  -> decltype(std::declval<Target>().update(delta, data)) {
    96  static_cast<Target *>(this)->update(delta, data);
    97  }
    98 
    99  template<typename Target = Derived>
    100  auto tick(int, state_value_t<state::SUCCEEDED>)
    101  -> decltype(std::declval<Target>().succeeded()) {
    102  static_cast<Target *>(this)->succeeded();
    103  }
    104 
    105  template<typename Target = Derived>
    106  auto tick(int, state_value_t<state::FAILED>)
    107  -> decltype(std::declval<Target>().failed()) {
    108  static_cast<Target *>(this)->failed();
    109  }
    110 
    111  template<typename Target = Derived>
    112  auto tick(int, state_value_t<state::ABORTED>)
    113  -> decltype(std::declval<Target>().aborted()) {
    114  static_cast<Target *>(this)->aborted();
    115  }
    116 
    117  template<state value, typename... Args>
    118  void tick(char, state_value_t<value>, Args &&...) const ENTT_NOEXCEPT {}
    119 
    120 protected:
    127  void succeed() ENTT_NOEXCEPT {
    128  if(alive()) {
    129  current = state::SUCCEEDED;
    130  }
    131  }
    132 
    139  void fail() ENTT_NOEXCEPT {
    140  if(alive()) {
    141  current = state::FAILED;
    142  }
    143  }
    144 
    151  void pause() ENTT_NOEXCEPT {
    152  if(current == state::RUNNING) {
    153  current = state::PAUSED;
    154  }
    155  }
    156 
    163  void unpause() ENTT_NOEXCEPT {
    164  if(current == state::PAUSED) {
    165  current = state::RUNNING;
    166  }
    167  }
    168 
    169 public:
    171  using delta_type = Delta;
    172 
    174  virtual ~process() ENTT_NOEXCEPT {
    175  static_assert(std::is_base_of_v<process, Derived>);
    176  }
    177 
    186  void abort(const bool immediately = false) ENTT_NOEXCEPT {
    187  if(alive()) {
    188  current = state::ABORTED;
    189 
    190  if(immediately) {
    191  tick({});
    192  }
    193  }
    194  }
    195 
    200  bool alive() const ENTT_NOEXCEPT {
    201  return current == state::RUNNING || current == state::PAUSED;
    202  }
    203 
    208  bool dead() const ENTT_NOEXCEPT {
    209  return current == state::FINISHED;
    210  }
    211 
    216  bool paused() const ENTT_NOEXCEPT {
    217  return current == state::PAUSED;
    218  }
    219 
    224  bool rejected() const ENTT_NOEXCEPT {
    225  return stopped;
    226  }
    227 
    233  void tick(const Delta delta, void *data = nullptr) {
    234  switch (current) {
    235  case state::UNINITIALIZED:
    236  tick(0, state_value_t<state::UNINITIALIZED>{});
    237  current = state::RUNNING;
    238  break;
    239  case state::RUNNING:
    240  tick(0, state_value_t<state::RUNNING>{}, delta, data);
    241  break;
    242  default:
    243  // suppress warnings
    244  break;
    245  }
    246 
    247  // if it's dead, it must be notified and removed immediately
    248  switch(current) {
    249  case state::SUCCEEDED:
    250  tick(0, state_value_t<state::SUCCEEDED>{});
    251  current = state::FINISHED;
    252  break;
    253  case state::FAILED:
    254  tick(0, state_value_t<state::FAILED>{});
    255  current = state::FINISHED;
    256  stopped = true;
    257  break;
    258  case state::ABORTED:
    259  tick(0, state_value_t<state::ABORTED>{});
    260  current = state::FINISHED;
    261  stopped = true;
    262  break;
    263  default:
    264  // suppress warnings
    265  break;
    266  }
    267  }
    268 
    269 private:
    270  state current{state::UNINITIALIZED};
    271  bool stopped{false};
    272 };
    273 
    274 
    314 template<typename Func, typename Delta>
    315 struct process_adaptor: process<process_adaptor<Func, Delta>, Delta>, private Func {
    321  template<typename... Args>
    322  process_adaptor(Args &&... args)
    323  : Func{std::forward<Args>(args)...}
    324  {}
    325 
    331  void update(const Delta delta, void *data) {
    332  Func::operator()(delta, data, [this]() { this->succeed(); }, [this]() { this->fail(); });
    333  }
    334 };
    335 
    336 
    337 }
    338 
    339 
    340 #endif // ENTT_PROCESS_PROCESS_HPP
    void unpause() ENTT_NOEXCEPT
    Restarts a process if it&#39;s paused.
    Definition: process.hpp:163
    -
    bool rejected() const ENTT_NOEXCEPT
    Returns true if a process terminated with errors.
    Definition: process.hpp:224
    -
    bool alive() const ENTT_NOEXCEPT
    Returns true if a process is either running or paused.
    Definition: process.hpp:200
    -
    bool dead() const ENTT_NOEXCEPT
    Returns true if a process is already terminated.
    Definition: process.hpp:208
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    Delta delta_type
    Type used to provide elapsed time.
    Definition: process.hpp:171
    -
    void pause() ENTT_NOEXCEPT
    Stops a process if it&#39;s in a running state.
    Definition: process.hpp:151
    -
    void succeed() ENTT_NOEXCEPT
    Terminates a process with success if it&#39;s still alive.
    Definition: process.hpp:127
    -
    bool paused() const ENTT_NOEXCEPT
    Returns true if a process is currently paused.
    Definition: process.hpp:216
    -
    void abort(const bool immediately=false) ENTT_NOEXCEPT
    Aborts a process if it&#39;s still alive.
    Definition: process.hpp:186
    -
    void tick(const Delta delta, void *data=nullptr)
    Updates a process and its internal state if required.
    Definition: process.hpp:233
    -
    virtual ~process() ENTT_NOEXCEPT
    Default destructor.
    Definition: process.hpp:174
    -
    void update(const Delta delta, void *data)
    Updates a process and its internal state if required.
    Definition: process.hpp:331
    -
    Base class for processes.
    Definition: process.hpp:73
    -
    Adaptor for lambdas and functors to turn them into processes.
    Definition: process.hpp:315
    -
    void fail() ENTT_NOEXCEPT
    Terminates a process with errors if it&#39;s still alive.
    Definition: process.hpp:139
    -
    process_adaptor(Args &&... args)
    Constructs a process adaptor from a lambda or a functor.
    Definition: process.hpp:322
    +
    1 #ifndef ENTT_PROCESS_PROCESS_HPP
    +
    2 #define ENTT_PROCESS_PROCESS_HPP
    +
    3 
    +
    4 
    +
    5 #include <utility>
    +
    6 #include <type_traits>
    +
    7 #include "../config/config.h"
    +
    8 
    +
    9 
    +
    10 namespace entt {
    +
    11 
    +
    12 
    +
    72 template<typename Derived, typename Delta>
    +
    73 class process {
    +
    74  enum class state: unsigned int {
    +
    75  UNINITIALIZED = 0,
    +
    76  RUNNING,
    +
    77  PAUSED,
    +
    78  SUCCEEDED,
    +
    79  FAILED,
    +
    80  ABORTED,
    +
    81  FINISHED
    +
    82  };
    +
    83 
    +
    84  template<state value>
    +
    85  using state_value_t = std::integral_constant<state, value>;
    +
    86 
    +
    87  template<typename Target = Derived>
    +
    88  auto tick(int, state_value_t<state::UNINITIALIZED>)
    +
    89  -> decltype(std::declval<Target>().init()) {
    +
    90  static_cast<Target *>(this)->init();
    +
    91  }
    +
    92 
    +
    93  template<typename Target = Derived>
    +
    94  auto tick(int, state_value_t<state::RUNNING>, Delta delta, void *data)
    +
    95  -> decltype(std::declval<Target>().update(delta, data)) {
    +
    96  static_cast<Target *>(this)->update(delta, data);
    +
    97  }
    +
    98 
    +
    99  template<typename Target = Derived>
    +
    100  auto tick(int, state_value_t<state::SUCCEEDED>)
    +
    101  -> decltype(std::declval<Target>().succeeded()) {
    +
    102  static_cast<Target *>(this)->succeeded();
    +
    103  }
    +
    104 
    +
    105  template<typename Target = Derived>
    +
    106  auto tick(int, state_value_t<state::FAILED>)
    +
    107  -> decltype(std::declval<Target>().failed()) {
    +
    108  static_cast<Target *>(this)->failed();
    +
    109  }
    +
    110 
    +
    111  template<typename Target = Derived>
    +
    112  auto tick(int, state_value_t<state::ABORTED>)
    +
    113  -> decltype(std::declval<Target>().aborted()) {
    +
    114  static_cast<Target *>(this)->aborted();
    +
    115  }
    +
    116 
    +
    117  template<state value, typename... Args>
    +
    118  void tick(char, state_value_t<value>, Args &&...) const ENTT_NOEXCEPT {}
    +
    119 
    +
    120 protected:
    +
    127  void succeed() ENTT_NOEXCEPT {
    +
    128  if(alive()) {
    +
    129  current = state::SUCCEEDED;
    +
    130  }
    +
    131  }
    +
    132 
    +
    139  void fail() ENTT_NOEXCEPT {
    +
    140  if(alive()) {
    +
    141  current = state::FAILED;
    +
    142  }
    +
    143  }
    +
    144 
    +
    151  void pause() ENTT_NOEXCEPT {
    +
    152  if(current == state::RUNNING) {
    +
    153  current = state::PAUSED;
    +
    154  }
    +
    155  }
    +
    156 
    +
    163  void unpause() ENTT_NOEXCEPT {
    +
    164  if(current == state::PAUSED) {
    +
    165  current = state::RUNNING;
    +
    166  }
    +
    167  }
    +
    168 
    +
    169 public:
    +
    171  using delta_type = Delta;
    +
    172 
    +
    174  virtual ~process() ENTT_NOEXCEPT {
    +
    175  static_assert(std::is_base_of_v<process, Derived>);
    +
    176  }
    +
    177 
    +
    186  void abort(const bool immediately = false) ENTT_NOEXCEPT {
    +
    187  if(alive()) {
    +
    188  current = state::ABORTED;
    +
    189 
    +
    190  if(immediately) {
    +
    191  tick({});
    +
    192  }
    +
    193  }
    +
    194  }
    +
    195 
    +
    200  bool alive() const ENTT_NOEXCEPT {
    +
    201  return current == state::RUNNING || current == state::PAUSED;
    +
    202  }
    +
    203 
    +
    208  bool dead() const ENTT_NOEXCEPT {
    +
    209  return current == state::FINISHED;
    +
    210  }
    +
    211 
    +
    216  bool paused() const ENTT_NOEXCEPT {
    +
    217  return current == state::PAUSED;
    +
    218  }
    +
    219 
    +
    224  bool rejected() const ENTT_NOEXCEPT {
    +
    225  return stopped;
    +
    226  }
    +
    227 
    +
    233  void tick(const Delta delta, void *data = nullptr) {
    +
    234  switch (current) {
    +
    235  case state::UNINITIALIZED:
    +
    236  tick(0, state_value_t<state::UNINITIALIZED>{});
    +
    237  current = state::RUNNING;
    +
    238  break;
    +
    239  case state::RUNNING:
    +
    240  tick(0, state_value_t<state::RUNNING>{}, delta, data);
    +
    241  break;
    +
    242  default:
    +
    243  // suppress warnings
    +
    244  break;
    +
    245  }
    +
    246 
    +
    247  // if it's dead, it must be notified and removed immediately
    +
    248  switch(current) {
    +
    249  case state::SUCCEEDED:
    +
    250  tick(0, state_value_t<state::SUCCEEDED>{});
    +
    251  current = state::FINISHED;
    +
    252  break;
    +
    253  case state::FAILED:
    +
    254  tick(0, state_value_t<state::FAILED>{});
    +
    255  current = state::FINISHED;
    +
    256  stopped = true;
    +
    257  break;
    +
    258  case state::ABORTED:
    +
    259  tick(0, state_value_t<state::ABORTED>{});
    +
    260  current = state::FINISHED;
    +
    261  stopped = true;
    +
    262  break;
    +
    263  default:
    +
    264  // suppress warnings
    +
    265  break;
    +
    266  }
    +
    267  }
    +
    268 
    +
    269 private:
    +
    270  state current{state::UNINITIALIZED};
    +
    271  bool stopped{false};
    +
    272 };
    +
    273 
    +
    274 
    +
    314 template<typename Func, typename Delta>
    +
    315 struct process_adaptor: process<process_adaptor<Func, Delta>, Delta>, private Func {
    +
    321  template<typename... Args>
    +
    322  process_adaptor(Args &&... args)
    +
    323  : Func{std::forward<Args>(args)...}
    +
    324  {}
    +
    325 
    +
    331  void update(const Delta delta, void *data) {
    +
    332  Func::operator()(delta, data, [this]() { this->succeed(); }, [this]() { this->fail(); });
    +
    333  }
    +
    334 };
    +
    335 
    +
    336 
    +
    337 }
    +
    338 
    +
    339 
    +
    340 #endif // ENTT_PROCESS_PROCESS_HPP
    +
    bool rejected() const ENTT_NOEXCEPT
    Returns true if a process terminated with errors.
    Definition: process.hpp:224
    +
    void pause() ENTT_NOEXCEPT
    Stops a process if it's in a running state.
    Definition: process.hpp:151
    +
    Delta delta_type
    Type used to provide elapsed time.
    Definition: process.hpp:171
    +
    bool dead() const ENTT_NOEXCEPT
    Returns true if a process is already terminated.
    Definition: process.hpp:208
    +
    bool alive() const ENTT_NOEXCEPT
    Returns true if a process is either running or paused.
    Definition: process.hpp:200
    +
    bool paused() const ENTT_NOEXCEPT
    Returns true if a process is currently paused.
    Definition: process.hpp:216
    +
    Base class for processes.
    Definition: process.hpp:73
    +
    process_adaptor(Args &&... args)
    Constructs a process adaptor from a lambda or a functor.
    Definition: process.hpp:322
    +
    void fail() ENTT_NOEXCEPT
    Terminates a process with errors if it's still alive.
    Definition: process.hpp:139
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    void abort(const bool immediately=false) ENTT_NOEXCEPT
    Aborts a process if it's still alive.
    Definition: process.hpp:186
    +
    virtual ~process() ENTT_NOEXCEPT
    Default destructor.
    Definition: process.hpp:174
    +
    Adaptor for lambdas and functors to turn them into processes.
    Definition: process.hpp:315
    +
    void update(const Delta delta, void *data)
    Updates a process and its internal state if required.
    Definition: process.hpp:331
    +
    void tick(const Delta delta, void *data=nullptr)
    Updates a process and its internal state if required.
    Definition: process.hpp:233
    +
    void succeed() ENTT_NOEXCEPT
    Terminates a process with success if it's still alive.
    Definition: process.hpp:127
    +
    void unpause() ENTT_NOEXCEPT
    Restarts a process if it's paused.
    Definition: process.hpp:163
    diff --git a/process_8md_source.html b/process_8md_source.html deleted file mode 100644 index 1f0c0c002..000000000 --- a/process_8md_source.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - -EnTT: docs/md/process.md Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    EnTT -  3.2.1 -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    docs/md/process.md
    -
    -
    -
    1 # Crash Course: cooperative scheduler
    2 
    3 <!--
    4 @cond TURN_OFF_DOXYGEN
    5 -->
    6 # Table of Contents
    7 
    8 * [Introduction](#introduction)
    9 * [The process](#the-process)
    10  * [Adaptor](#adaptor)
    11 * [The scheduler](#the-scheduler)
    12 <!--
    13 @endcond TURN_OFF_DOXYGEN
    14 -->
    15 
    16 # Introduction
    17 
    18 Sometimes processes are a useful tool to work around the strict definition of a
    19 system and introduce logic in a different way, usually without resorting to the
    20 introduction of other components.
    21 
    22 `EnTT` offers a minimal support to this paradigm by introducing a few classes
    23 that users can use to define and execute cooperative processes.
    24 
    25 # The process
    26 
    27 A typical process must inherit from the `process` class template that stays true
    28 to the CRTP idiom. Moreover, derived classes must specify what's the intended
    29 type for elapsed times.
    30 
    31 A process should expose publicly the following member functions whether
    32 required (note that it isn't required to define a function unless the derived
    33 class wants to _override_ the default behavior):
    34 
    35 * `void update(Delta, void *);`
    36 
    37  It's invoked once per tick until a process is explicitly aborted or it
    38  terminates either with or without errors. Even though it's not mandatory to
    39  declare this member function, as a rule of thumb each process should at
    40  least define it to work properly. The `void *` parameter is an opaque pointer
    41  to user data (if any) forwarded directly to the process during an update.
    42 
    43 * `void init();`
    44 
    45  It's invoked when the process joins the running queue of a scheduler. This
    46  happens as soon as it's attached to the scheduler if the process is a top
    47  level one, otherwise when it replaces its parent if the process is a
    48  continuation.
    49 
    50 * `void succeeded();`
    51 
    52  It's invoked in case of success, immediately after an update and during the
    53  same tick.
    54 
    55 * `void failed();`
    56 
    57  It's invoked in case of errors, immediately after an update and during the
    58  same tick.
    59 
    60 * `void aborted();`
    61 
    62  It's invoked only if a process is explicitly aborted. There is no guarantee
    63  that it executes in the same tick, this depends solely on whether the
    64  process is aborted immediately or not.
    65 
    66 Derived classes can also change the internal state of a process by invoking
    67 `succeed` and `fail`, as well as `pause` and `unpause` the process itself. All
    68 these are protected member functions made available to be able to manage the
    69 life cycle of a process from a derived class.
    70 
    71 Here is a minimal example for the sake of curiosity:
    72 
    73 ```cpp
    74 struct my_process: entt::process<my_process, std::uint32_t> {
    75  using delta_type = std::uint32_t;
    76 
    77  void update(delta_type delta, void *) {
    78  remaining -= std::min(remaining, delta);
    79 
    80  // ...
    81 
    82  if(!remaining) {
    83  succeed();
    84  }
    85  }
    86 
    87 private:
    88  delta_type remaining{1000u};
    89 };
    90 ```
    91 
    92 ## Adaptor
    93 
    94 Lambdas and functors can't be used directly with a scheduler for they are not
    95 properly defined processes with managed life cycles.<br/>
    96 This class helps in filling the gap and turning lambdas and functors into
    97 full featured processes usable by a scheduler.
    98 
    99 The function call operator has a signature similar to the one of the `update`
    100 function of a process but for the fact that it receives two extra arguments to
    101 call whenever a process is terminated with success or with an error:
    102 
    103 ```cpp
    104 void(Delta delta, void *data, auto succeed, auto fail);
    105 ```
    106 
    107 Parameters have the following meaning:
    108 
    109 * `delta` is the elapsed time.
    110 * `data` is an opaque pointer to user data if any, `nullptr` otherwise.
    111 * `succeed` is a function to call when a process terminates with success.
    112 * `fail` is a function to call when a process terminates with errors.
    113 
    114 Both `succeed` and `fail` accept no parameters at all.
    115 
    116 Note that usually users shouldn't worry about creating adaptors at all. A
    117 scheduler creates them internally each and every time a lambda or a functor is
    118 used as a process.
    119 
    120 # The scheduler
    121 
    122 A cooperative scheduler runs different processes and helps managing their life
    123 cycles.
    124 
    125 Each process is invoked once per tick. If it terminates, it's removed
    126 automatically from the scheduler and it's never invoked again. Otherwise it's
    127 a good candidate to run one more time the next tick.<br/>
    128 A process can also have a child. In this case, the parent process is replaced
    129 with its child when it terminates and only if it returns with success. In case
    130 of errors, both the parent process and its child are discarded. This way, it's
    131 easy to create chain of processes to run sequentially.
    132 
    133 Using a scheduler is straightforward. To create it, users must provide only the
    134 type for the elapsed times and no arguments at all:
    135 
    136 ```cpp
    137 entt::scheduler<std::uint32_t> scheduler;
    138 ```
    139 
    140 It has member functions to query its internal data structures, like `empty` or
    141 `size`, as well as a `clear` utility to reset it to a clean state:
    142 
    143 ```cpp
    144 // checks if there are processes still running
    145 const auto empty = scheduler.empty();
    146 
    147 // gets the number of processes still running
    148 entt::scheduler<std::uint32_t>::size_type size = scheduler.size();
    149 
    150 // resets the scheduler to its initial state and discards all the processes
    151 scheduler.clear();
    152 ```
    153 
    154 To attach a process to a scheduler there are mainly two ways:
    155 
    156 * If the process inherits from the `process` class template, it's enough to
    157  indicate its type and submit all the parameters required to construct it to
    158  the `attach` member function:
    159 
    160  ```cpp
    161  scheduler.attach<my_process>("foobar");
    162  ```
    163 
    164 * Otherwise, in case of a lambda or a functor, it's enough to provide an
    165  instance of the class to the `attach` member function:
    166 
    167  ```cpp
    168  scheduler.attach([](auto...){ /* ... */ });
    169  ```
    170 
    171 In both cases, the return value is an opaque object that offers a `then` member
    172 function to use to create chains of processes to run sequentially.<br/>
    173 As a minimal example of use:
    174 
    175 ```cpp
    176 // schedules a task in the form of a lambda function
    177 scheduler.attach([](auto delta, void *, auto succeed, auto fail) {
    178  // ...
    179 })
    180 // appends a child in the form of another lambda function
    181 .then([](auto delta, void *, auto succeed, auto fail) {
    182  // ...
    183 })
    184 // appends a child in the form of a process class
    185 .then<my_process>();
    186 ```
    187 
    188 To update a scheduler and therefore all its processes, the `update` member
    189 function is the way to go:
    190 
    191 ```cpp
    192 // updates all the processes, no user data are provided
    193 scheduler.update(delta);
    194 
    195 // updates all the processes and provides them with custom data
    196 scheduler.update(delta, &data);
    197 ```
    198 
    199 In addition to these functions, the scheduler offers an `abort` member function
    200 that can be used to discard all the running processes at once:
    201 
    202 ```cpp
    203 // aborts all the processes abruptly ...
    204 scheduler.abort(true);
    205 
    206 // ... or gracefully during the next tick
    207 scheduler.abort();
    208 ```
    - - - - diff --git a/registry_8hpp_source.html b/registry_8hpp_source.html index c061ab22a..5f26c8ad3 100644 --- a/registry_8hpp_source.html +++ b/registry_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/entity/registry.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    registry.hpp
    -
    1 #ifndef ENTT_ENTITY_REGISTRY_HPP
    2 #define ENTT_ENTITY_REGISTRY_HPP
    3 
    4 
    5 #include <tuple>
    6 #include <vector>
    7 #include <memory>
    8 #include <utility>
    9 #include <cstddef>
    10 #include <iterator>
    11 #include <algorithm>
    12 #include <type_traits>
    13 #include "../config/config.h"
    14 #include "../core/family.hpp"
    15 #include "../core/algorithm.hpp"
    16 #include "../core/type_traits.hpp"
    17 #include "../signal/delegate.hpp"
    18 #include "../signal/sigh.hpp"
    19 #include "runtime_view.hpp"
    20 #include "sparse_set.hpp"
    21 #include "snapshot.hpp"
    22 #include "storage.hpp"
    23 #include "utility.hpp"
    24 #include "entity.hpp"
    25 #include "group.hpp"
    26 #include "view.hpp"
    27 #include "fwd.hpp"
    28 
    29 
    30 namespace entt {
    31 
    32 
    43 template<typename Entity>
    44 class basic_registry {
    45  using context_family = family<struct internal_registry_context_family>;
    46  using component_family = family<struct internal_registry_component_family>;
    47  using traits_type = entt_traits<std::underlying_type_t<Entity>>;
    48 
    49  template<typename Component>
    50  struct pool_handler: storage<Entity, Component> {
    51  std::size_t super{};
    52 
    53  pool_handler() ENTT_NOEXCEPT = default;
    54 
    55  pool_handler(const storage<Entity, Component> &other)
    56  : storage<Entity, Component>{other}
    57  {}
    58 
    59  auto on_construct() ENTT_NOEXCEPT {
    60  return sink{construction};
    61  }
    62 
    63  auto on_replace() ENTT_NOEXCEPT {
    64  return sink{update};
    65  }
    66 
    67  auto on_destroy() ENTT_NOEXCEPT {
    68  return sink{destruction};
    69  }
    70 
    71  template<typename... Args>
    72  decltype(auto) assign(basic_registry &owner, const Entity entt, Args &&... args) {
    73  if constexpr(ENTT_ENABLE_ETO(Component)) {
    75  construction.publish(entt, owner, Component{});
    76  return Component{std::forward<Args>(args)...};
    77  } else {
    78  auto &component = storage<Entity, Component>::construct(entt, std::forward<Args>(args)...);
    79  construction.publish(entt, owner, component);
    80  return component;
    81  }
    82  }
    83 
    84  template<typename It, typename... Args>
    85  auto batch(basic_registry &owner, It first, It last, Args &&... args) {
    86  auto it = storage<Entity, Component>::batch(first, last, std::forward<Args>(args)...);
    87 
    88  if(!construction.empty()) {
    89  std::for_each(first, last, [this, &owner, it](const auto entt) mutable {
    90  construction.publish(entt, owner, *(it++));
    91  });
    92  }
    93 
    94  return it;
    95  }
    96 
    97  void remove(basic_registry &owner, const Entity entt) {
    98  destruction.publish(entt, owner);
    100  }
    101 
    102  template<typename... Args>
    103  decltype(auto) replace(basic_registry &owner, const Entity entt, Args &&... args) {
    104  if constexpr(ENTT_ENABLE_ETO(Component)) {
    105  ENTT_ASSERT((storage<Entity, Component>::has(entt)));
    106  update.publish(entt, owner, Component{});
    107  return Component{std::forward<Args>(args)...};
    108  } else {
    109  Component component{std::forward<Args>(args)...};
    110  update.publish(entt, owner, component);
    111  return (storage<Entity, Component>::get(entt) = std::move(component));
    112  }
    113  }
    114 
    115  private:
    116  using reference_type = std::conditional_t<ENTT_ENABLE_ETO(Component), const Component &, Component &>;
    117  sigh<void(const Entity, basic_registry &, reference_type)> construction{};
    118  sigh<void(const Entity, basic_registry &, reference_type)> update{};
    119  sigh<void(const Entity, basic_registry &)> destruction{};
    120  };
    121 
    122  template<typename Component>
    123  using pool_type = pool_handler<std::decay_t<Component>>;
    124 
    125  template<typename...>
    126  struct group_handler;
    127 
    128  template<typename... Exclude, typename... Get>
    129  struct group_handler<exclude_t<Exclude...>, get_t<Get...>> {
    130  const std::tuple<pool_type<Get> *..., pool_type<Exclude> *...> cpools{};
    131  sparse_set<Entity> set{};
    132 
    133  template<typename Component>
    134  void maybe_valid_if(const Entity entt) {
    135  if constexpr(std::disjunction_v<std::is_same<Get, Component>...>) {
    136  if(((std::is_same_v<Component, Get> || std::get<pool_type<Get> *>(cpools)->has(entt)) && ...)
    137  && (!std::get<pool_type<Exclude> *>(cpools)->has(entt) && ...)
    138  && !set.has(entt))
    139  {
    140  set.construct(entt);
    141  }
    142  } else if constexpr(std::disjunction_v<std::is_same<Exclude, Component>...>) {
    143  if((std::get<pool_type<Get> *>(cpools)->has(entt) && ...)
    144  && ((std::is_same_v<Exclude, Component> || !std::get<pool_type<Exclude> *>(cpools)->has(entt)) && ...)
    145  && !set.has(entt))
    146  {
    147  set.construct(entt);
    148  }
    149  }
    150  }
    151 
    152  void discard_if(const Entity entt) {
    153  if(set.has(entt)) {
    154  set.destroy(entt);
    155  }
    156  }
    157  };
    158 
    159  template<typename... Exclude, typename... Get, typename... Owned>
    160  struct group_handler<exclude_t<Exclude...>, get_t<Get...>, Owned...> {
    161  const std::tuple<pool_type<Owned> *..., pool_type<Get> *..., pool_type<Exclude> *...> cpools{};
    162  std::size_t owned{};
    163 
    164  template<typename Component>
    165  void maybe_valid_if(const Entity entt) {
    166  if constexpr(std::disjunction_v<std::is_same<Owned, Component>..., std::is_same<Get, Component>...>) {
    167  if(((std::is_same_v<Component, Owned> || std::get<pool_type<Owned> *>(cpools)->has(entt)) && ...)
    168  && ((std::is_same_v<Component, Get> || std::get<pool_type<Get> *>(cpools)->has(entt)) && ...)
    169  && (!std::get<pool_type<Exclude> *>(cpools)->has(entt) && ...)
    170  && !(std::get<0>(cpools)->index(entt) < owned))
    171  {
    172  const auto pos = owned++;
    173  (std::get<pool_type<Owned> *>(cpools)->swap(std::get<pool_type<Owned> *>(cpools)->data()[pos], entt), ...);
    174  }
    175  } else if constexpr(std::disjunction_v<std::is_same<Exclude, Component>...>) {
    176  if((std::get<pool_type<Owned> *>(cpools)->has(entt) && ...)
    177  && (std::get<pool_type<Get> *>(cpools)->has(entt) && ...)
    178  && ((std::is_same_v<Exclude, Component> || !std::get<pool_type<Exclude> *>(cpools)->has(entt)) && ...)
    179  && !(std::get<0>(cpools)->index(entt) < owned))
    180  {
    181  const auto pos = owned++;
    182  (std::get<pool_type<Owned> *>(cpools)->swap(std::get<pool_type<Owned> *>(cpools)->data()[pos], entt), ...);
    183  }
    184  }
    185  }
    186 
    187  void discard_if(const Entity entt) {
    188  if(std::get<0>(cpools)->has(entt) && std::get<0>(cpools)->index(entt) < owned) {
    189  const auto pos = --owned;
    190  (std::get<pool_type<Owned> *>(cpools)->swap(std::get<pool_type<Owned> *>(cpools)->data()[pos], entt), ...);
    191  }
    192  }
    193  };
    194 
    195  struct pool_data {
    196  std::unique_ptr<sparse_set<Entity>> pool;
    197  void(* remove)(sparse_set<Entity> &, basic_registry &, const Entity);
    198  std::unique_ptr<sparse_set<Entity>>(* clone)(const sparse_set<Entity> &);
    199  void(* stomp)(const sparse_set<Entity> &, const Entity, basic_registry &, const Entity);
    200  ENTT_ID_TYPE runtime_type;
    201  };
    202 
    203  struct group_data {
    204  std::size_t extent[3];
    205  std::unique_ptr<void, void(*)(void *)> group;
    206  bool(* owned)(const component) ENTT_NOEXCEPT;
    207  bool(* get)(const component) ENTT_NOEXCEPT;
    208  bool(* exclude)(const component) ENTT_NOEXCEPT;
    209  };
    210 
    211  struct ctx_variable {
    212  std::unique_ptr<void, void(*)(void *)> value;
    213  ENTT_ID_TYPE runtime_type;
    214  };
    215 
    216  template<typename Type, typename Family>
    217  static ENTT_ID_TYPE runtime_type() ENTT_NOEXCEPT {
    218  if constexpr(is_named_type_v<Type>) {
    219  return named_type_traits_v<Type>;
    220  } else {
    221  return Family::template type<std::decay_t<Type>>;
    222  }
    223  }
    224 
    225  auto generate() {
    226  Entity entt;
    227 
    228  if(destroyed == null) {
    229  entt = entities.emplace_back(entity_type(entities.size()));
    230  // traits_type::entity_mask is reserved to allow for null identifiers
    231  ENTT_ASSERT(to_integer(entt) < traits_type::entity_mask);
    232  } else {
    233  const auto curr = to_integer(destroyed);
    234  const auto version = to_integer(entities[curr]) & (traits_type::version_mask << traits_type::entity_shift);
    235  destroyed = entity_type{to_integer(entities[curr]) & traits_type::entity_mask};
    236  entt = entity_type{curr | version};
    237  entities[curr] = entt;
    238  }
    239 
    240  return entt;
    241  }
    242 
    243  void release(const Entity entity) {
    244  // lengthens the implicit list of destroyed entities
    245  const auto entt = to_integer(entity) & traits_type::entity_mask;
    246  const auto version = ((to_integer(entity) >> traits_type::entity_shift) + 1) << traits_type::entity_shift;
    247  const auto node = to_integer(destroyed) | version;
    248  entities[entt] = Entity{node};
    249  destroyed = Entity{entt};
    250  }
    251 
    252  template<typename Component>
    253  const pool_type<Component> * assure() const {
    254  const auto ctype = to_integer(type<Component>());
    255  pool_data *pdata = nullptr;
    256 
    257  if constexpr(is_named_type_v<Component>) {
    258  const auto it = std::find_if(pools.begin()+skip_family_pools, pools.end(), [ctype](const auto &candidate) {
    259  return candidate.runtime_type == ctype;
    260  });
    261 
    262  pdata = (it == pools.cend() ? &pools.emplace_back() : &(*it));
    263  } else {
    264  if(!(ctype < skip_family_pools)) {
    265  pools.reserve(pools.size()+ctype-skip_family_pools+1);
    266 
    267  while(!(ctype < skip_family_pools)) {
    268  pools.emplace(pools.begin()+(skip_family_pools++), pool_data{});
    269  }
    270  }
    271 
    272  pdata = &pools[ctype];
    273  }
    274 
    275  if(!pdata->pool) {
    276  pdata->runtime_type = ctype;
    277  pdata->pool = std::make_unique<pool_type<Component>>();
    278 
    279  pdata->remove = [](sparse_set<Entity> &cpool, basic_registry &owner, const Entity entt) {
    280  static_cast<pool_type<Component> &>(cpool).remove(owner, entt);
    281  };
    282 
    283  if constexpr(std::is_copy_constructible_v<std::decay_t<Component>>) {
    284  pdata->clone = [](const sparse_set<Entity> &cpool) -> std::unique_ptr<sparse_set<Entity>> {
    285  return std::make_unique<pool_type<Component>>(static_cast<const pool_type<Component> &>(cpool));
    286  };
    287 
    288  pdata->stomp = [](const sparse_set<Entity> &cpool, const Entity from, basic_registry &other, const Entity to) {
    289  other.assign_or_replace<Component>(to, static_cast<const pool_type<Component> &>(cpool).get(from));
    290  };
    291  } else {
    292  pdata->clone = nullptr;
    293  pdata->stomp = nullptr;
    294  }
    295  }
    296 
    297  return static_cast<pool_type<Component> *>(pdata->pool.get());
    298  }
    299 
    300  template<typename Component>
    301  pool_type<Component> * assure() {
    302  return const_cast<pool_type<Component> *>(std::as_const(*this).template assure<Component>());
    303  }
    304 
    305 public:
    307  using entity_type = Entity;
    309  using version_type = typename traits_type::version_type;
    311  using size_type = std::size_t;
    312 
    314  basic_registry() ENTT_NOEXCEPT = default;
    315 
    317  basic_registry(basic_registry &&) = default;
    318 
    320  basic_registry & operator=(basic_registry &&) = default;
    321 
    331  template<typename Component>
    332  static component type() ENTT_NOEXCEPT {
    333  return component{runtime_type<Component, component_family>()};
    334  }
    335 
    340  template<typename... Component>
    341  void prepare() {
    342  (assure<Component>(), ...);
    343  }
    344 
    350  template<typename Component>
    351  size_type size() const ENTT_NOEXCEPT {
    352  return assure<Component>()->size();
    353  }
    354 
    359  size_type size() const ENTT_NOEXCEPT {
    360  return entities.size();
    361  }
    362 
    367  size_type alive() const ENTT_NOEXCEPT {
    368  auto sz = entities.size();
    369  auto curr = destroyed;
    370 
    371  for(; curr != null; --sz) {
    372  curr = entities[to_integer(curr) & traits_type::entity_mask];
    373  }
    374 
    375  return sz;
    376  }
    377 
    391  template<typename... Component>
    392  void reserve(const size_type cap) {
    393  if constexpr(sizeof...(Component) == 0) {
    394  entities.reserve(cap);
    395  } else {
    396  (assure<Component>()->reserve(cap), ...);
    397  }
    398  }
    399 
    405  template<typename Component>
    406  size_type capacity() const ENTT_NOEXCEPT {
    407  return assure<Component>()->capacity();
    408  }
    409 
    415  size_type capacity() const ENTT_NOEXCEPT {
    416  return entities.capacity();
    417  }
    418 
    424  template<typename... Component>
    425  void shrink_to_fit() {
    426  (assure<Component>()->shrink_to_fit(), ...);
    427  }
    428 
    440  template<typename... Component>
    441  bool empty() const ENTT_NOEXCEPT {
    442  if constexpr(sizeof...(Component) == 0) {
    443  return !alive();
    444  } else {
    445  return (assure<Component>()->empty() && ...);
    446  }
    447  }
    448 
    466  template<typename Component>
    467  const Component * raw() const ENTT_NOEXCEPT {
    468  return assure<Component>()->raw();
    469  }
    470 
    472  template<typename Component>
    473  Component * raw() ENTT_NOEXCEPT {
    474  return const_cast<Component *>(std::as_const(*this).template raw<Component>());
    475  }
    476 
    490  template<typename Component>
    491  const entity_type * data() const ENTT_NOEXCEPT {
    492  return assure<Component>()->data();
    493  }
    494 
    500  bool valid(const entity_type entity) const ENTT_NOEXCEPT {
    501  const auto pos = size_type(to_integer(entity) & traits_type::entity_mask);
    502  return (pos < entities.size() && entities[pos] == entity);
    503  }
    504 
    510  static entity_type entity(const entity_type entity) ENTT_NOEXCEPT {
    511  return entity_type{to_integer(entity) & traits_type::entity_mask};
    512  }
    513 
    519  static version_type version(const entity_type entity) ENTT_NOEXCEPT {
    520  return version_type(to_integer(entity) >> traits_type::entity_shift);
    521  }
    522 
    536  version_type current(const entity_type entity) const ENTT_NOEXCEPT {
    537  const auto pos = size_type(to_integer(entity) & traits_type::entity_mask);
    538  ENTT_ASSERT(pos < entities.size());
    539  return version_type(to_integer(entities[pos]) >> traits_type::entity_shift);
    540  }
    541 
    564  template<typename... Component>
    565  auto create() {
    566  if constexpr(sizeof...(Component) == 0) {
    567  return generate();
    568  } else {
    569  const entity_type entt = generate();
    570  return std::tuple<entity_type, decltype(assign<Component>({}))...>{entt, assign<Component>(entt)...};
    571  }
    572  }
    573 
    590  template<typename... Component, typename It>
    591  auto create(It first, It last) {
    592  std::generate(first, last, [this]() { return generate(); });
    593 
    594  if constexpr(sizeof...(Component) > 0) {
    595  // the reverse iterators guarantee the ordering between entities and components (hint: the pools return begin())
    596  return std::make_tuple(assure<Component>()->batch(*this, std::make_reverse_iterator(last), std::make_reverse_iterator(first))...);
    597  }
    598  }
    599 
    619  template<typename... Component, typename... Exclude>
    621  const auto entt = create();
    622  stomp<Component...>(entt, src, other, exclude<Exclude...>);
    623  return entt;
    624  }
    625 
    648  template<typename... Component, typename It, typename... Exclude>
    649  void create(It first, It last, entity_type src, const basic_registry &other, exclude_t<Exclude...> = {}) {
    650  create(first, last);
    651 
    652  if constexpr(sizeof...(Component) == 0) {
    653  stomp<Component...>(first, last, src, other, exclude<Exclude...>);
    654  } else {
    655  static_assert(sizeof...(Exclude) == 0);
    656  (assure<Component>()->batch(*this, std::make_reverse_iterator(last), std::make_reverse_iterator(first), other.get<Component>(src)), ...);
    657  }
    658  }
    659 
    682  void destroy(const entity_type entity) {
    683  ENTT_ASSERT(valid(entity));
    684 
    685  for(auto pos = pools.size(); pos; --pos) {
    686  if(auto &pdata = pools[pos-1]; pdata.pool && pdata.pool->has(entity)) {
    687  pdata.remove(*pdata.pool, *this, entity);
    688  }
    689  }
    690 
    691  // just a way to protect users from listeners that attach components
    692  ENTT_ASSERT(orphan(entity));
    693  release(entity);
    694  }
    695 
    705  template<typename It>
    706  void destroy(It first, It last) {
    707  // useless this-> used to suppress a warning with clang
    708  std::for_each(first, last, [this](const auto entity) { this->destroy(entity); });
    709  }
    710 
    731  template<typename Component, typename... Args>
    732  decltype(auto) assign(const entity_type entity, [[maybe_unused]] Args &&... args) {
    733  ENTT_ASSERT(valid(entity));
    734  return assure<Component>()->assign(*this, entity, std::forward<Args>(args)...);
    735  }
    736 
    750  template<typename Component>
    751  void remove(const entity_type entity) {
    752  ENTT_ASSERT(valid(entity));
    753  assure<Component>()->remove(*this, entity);
    754  }
    755 
    768  template<typename... Component>
    769  bool has(const entity_type entity) const ENTT_NOEXCEPT {
    770  ENTT_ASSERT(valid(entity));
    771  return (assure<Component>()->has(entity) && ...);
    772  }
    773 
    788  template<typename... Component>
    789  decltype(auto) get([[maybe_unused]] const entity_type entity) const {
    790  ENTT_ASSERT(valid(entity));
    791 
    792  if constexpr(sizeof...(Component) == 1) {
    793  return (assure<Component>()->get(entity), ...);
    794  } else {
    795  return std::tuple<decltype(get<Component>({}))...>{get<Component>(entity)...};
    796  }
    797  }
    798 
    800  template<typename... Component>
    801  decltype(auto) get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT {
    802  ENTT_ASSERT(valid(entity));
    803 
    804  if constexpr(sizeof...(Component) == 1) {
    805  return (assure<Component>()->get(entity), ...);
    806  } else {
    807  return std::tuple<decltype(get<Component>({}))...>{get<Component>(entity)...};
    808  }
    809  }
    810 
    835  template<typename Component, typename... Args>
    836  decltype(auto) get_or_assign(const entity_type entity, Args &&... args) ENTT_NOEXCEPT {
    837  ENTT_ASSERT(valid(entity));
    838  auto *cpool = assure<Component>();
    839  return cpool->has(entity) ? cpool->get(entity) : cpool->assign(*this, entity, std::forward<Args>(args)...);
    840  }
    841 
    854  template<typename... Component>
    855  auto try_get([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT {
    856  ENTT_ASSERT(valid(entity));
    857 
    858  if constexpr(sizeof...(Component) == 1) {
    859  return (assure<Component>()->try_get(entity), ...);
    860  } else {
    861  return std::tuple<decltype(try_get<Component>({}))...>{try_get<Component>(entity)...};
    862  }
    863  }
    864 
    866  template<typename... Component>
    867  auto try_get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT {
    868  if constexpr(sizeof...(Component) == 1) {
    869  return (assure<Component>()->try_get(entity), ...);
    870  } else {
    871  return std::tuple<decltype(try_get<Component>({}))...>{try_get<Component>(entity)...};
    872  }
    873  }
    874 
    895  template<typename Component, typename... Args>
    896  decltype(auto) replace(const entity_type entity, Args &&... args) {
    897  ENTT_ASSERT(valid(entity));
    898  return assure<Component>()->replace(*this, entity, std::forward<Args>(args)...);
    899  }
    900 
    923  template<typename Component, typename... Args>
    924  decltype(auto) assign_or_replace(const entity_type entity, Args &&... args) {
    925  ENTT_ASSERT(valid(entity));
    926  auto *cpool = assure<Component>();
    927  return cpool->has(entity) ? cpool->replace(*this, entity, std::forward<Args>(args)...) : cpool->assign(*this, entity, std::forward<Args>(args)...);
    928  }
    929 
    957  template<typename Component>
    958  auto on_construct() ENTT_NOEXCEPT {
    959  return assure<Component>()->on_construct();
    960  }
    961 
    988  template<typename Component>
    989  auto on_replace() ENTT_NOEXCEPT {
    990  return assure<Component>()->on_replace();
    991  }
    992 
    1020  template<typename Component>
    1021  auto on_destroy() ENTT_NOEXCEPT {
    1022  return assure<Component>()->on_destroy();
    1023  }
    1024 
    1072  template<typename Component, typename Compare, typename Sort = std_sort, typename... Args>
    1073  void sort(Compare compare, Sort algo = Sort{}, Args &&... args) {
    1074  auto *cpool = assure<Component>();
    1075  ENTT_ASSERT(!cpool->super);
    1076  cpool->sort(cpool->begin(), cpool->end(), std::move(compare), std::move(algo), std::forward<Args>(args)...);
    1077  }
    1078 
    1114  template<typename To, typename From>
    1115  void sort() {
    1116  auto *cpool = assure<To>();
    1117  ENTT_ASSERT(!cpool->super);
    1118  cpool->respect(*assure<From>());
    1119  }
    1120 
    1135  template<typename Component>
    1136  void reset(const entity_type entity) {
    1137  ENTT_ASSERT(valid(entity));
    1138 
    1139  if(auto *cpool = assure<Component>(); cpool->has(entity)) {
    1140  cpool->remove(*this, entity);
    1141  }
    1142  }
    1143 
    1152  template<typename Component>
    1153  void reset() {
    1154  if(auto *cpool = assure<Component>(); cpool->on_destroy().empty()) {
    1155  // no group set, otherwise the signal wouldn't be empty
    1156  cpool->reset();
    1157  } else {
    1158  for(const auto entity: static_cast<const sparse_set<entity_type> &>(*cpool)) {
    1159  cpool->remove(*this, entity);
    1160  }
    1161  }
    1162  }
    1163 
    1172  void reset() {
    1173  each([this](const auto entity) {
    1174  // useless this-> used to suppress a warning with clang
    1175  this->destroy(entity);
    1176  });
    1177  }
    1178 
    1196  template<typename Func>
    1197  void each(Func func) const {
    1198  static_assert(std::is_invocable_v<Func, entity_type>);
    1199 
    1200  if(destroyed == null) {
    1201  for(auto pos = entities.size(); pos; --pos) {
    1202  func(entities[pos-1]);
    1203  }
    1204  } else {
    1205  for(auto pos = entities.size(); pos; --pos) {
    1206  const auto curr = entity_type(pos - 1);
    1207  const auto entity = entities[to_integer(curr)];
    1208  const auto entt = entity_type{to_integer(entity) & traits_type::entity_mask};
    1209 
    1210  if(curr == entt) {
    1211  func(entity);
    1212  }
    1213  }
    1214  }
    1215  }
    1216 
    1222  bool orphan(const entity_type entity) const {
    1223  ENTT_ASSERT(valid(entity));
    1224  bool orphan = true;
    1225 
    1226  for(std::size_t pos{}, last = pools.size(); pos < last && orphan; ++pos) {
    1227  const auto &pdata = pools[pos];
    1228  orphan = !(pdata.pool && pdata.pool->has(entity));
    1229  }
    1230 
    1231  return orphan;
    1232  }
    1233 
    1250  template<typename Func>
    1251  void orphans(Func func) const {
    1252  static_assert(std::is_invocable_v<Func, entity_type>);
    1253 
    1254  each([this, &func](const auto entity) {
    1255  if(orphan(entity)) {
    1256  func(entity);
    1257  }
    1258  });
    1259  }
    1260 
    1293  template<typename... Component, typename... Exclude>
    1294  entt::basic_view<Entity, exclude_t<Exclude...>, Component...> view(exclude_t<Exclude...> = {}) {
    1295  static_assert(sizeof...(Component) > 0);
    1296  return { assure<Component>()..., assure<Exclude>()... };
    1297  }
    1298 
    1300  template<typename... Component, typename... Exclude>
    1301  entt::basic_view<Entity, exclude_t<Exclude...>, Component...> view(exclude_t<Exclude...> = {}) const {
    1302  static_assert(std::conjunction_v<std::is_const<Component>...>);
    1303  return const_cast<basic_registry *>(this)->view<Component...>(exclude<Exclude...>);
    1304  }
    1305 
    1312  template<typename... Component>
    1313  bool sortable() const ENTT_NOEXCEPT {
    1314  return !(assure<Component>()->super || ...);
    1315  }
    1316 
    1344  template<typename... Owned, typename... Get, typename... Exclude>
    1345  entt::basic_group<Entity, exclude_t<Exclude...>, get_t<Get...>, Owned...> group(get_t<Get...>, exclude_t<Exclude...> = {}) {
    1346  static_assert(sizeof...(Owned) + sizeof...(Get) > 0);
    1347  static_assert(sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude) > 1);
    1348 
    1349  using handler_type = group_handler<exclude_t<Exclude...>, get_t<Get...>, Owned...>;
    1350 
    1351  [[maybe_unused]] constexpr auto size = sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude);
    1352  const auto cpools = std::make_tuple(assure<Owned>()..., assure<Get>()..., assure<Exclude>()...);
    1353  const std::size_t extent[3]{sizeof...(Owned), sizeof...(Get), sizeof...(Exclude)};
    1354  handler_type *handler = nullptr;
    1355 
    1356  if(auto it = std::find_if(groups.cbegin(), groups.cend(), [&extent](const auto &gdata) {
    1357  return std::equal(std::begin(extent), std::end(extent), std::begin(gdata.extent))
    1358  && (gdata.owned(type<Owned>()) && ...)
    1359  && (gdata.get(type<Get>()) && ...)
    1360  && (gdata.exclude(type<Exclude>()) && ...);
    1361  }); it != groups.cend())
    1362  {
    1363  handler = static_cast<handler_type *>(it->group.get());
    1364  }
    1365 
    1366  if(!handler) {
    1367  const void *maybe_valid_if = nullptr;
    1368  const void *discard_if = nullptr;
    1369 
    1370  group_data gdata{
    1371  { sizeof...(Owned), sizeof...(Get), sizeof...(Exclude) },
    1372  decltype(group_data::group){new handler_type{cpools}, [](void *gptr) { delete static_cast<handler_type *>(gptr); }},
    1373  [](const component ctype) ENTT_NOEXCEPT { return ((ctype == type<Owned>()) || ...); },
    1374  [](const component ctype) ENTT_NOEXCEPT { return ((ctype == type<Get>()) || ...); },
    1375  [](const component ctype) ENTT_NOEXCEPT { return ((ctype == type<Exclude>()) || ...); }
    1376  };
    1377 
    1378  if constexpr(sizeof...(Owned) == 0) {
    1379  handler = static_cast<handler_type *>(groups.emplace_back(std::move(gdata)).group.get());
    1380  } else {
    1381  ENTT_ASSERT(std::all_of(groups.cbegin(), groups.cend(), [&extent](const auto &curr) {
    1382  const std::size_t diff[3]{ (0u + ... + curr.owned(type<Owned>())), (0u + ... + curr.get(type<Get>())), (0u + ... + curr.exclude(type<Exclude>())) };
    1383  return !diff[0] || ((std::equal(std::begin(diff), std::end(diff), extent) || std::equal(std::begin(diff), std::end(diff), curr.extent)));
    1384  }));
    1385 
    1386  const auto next = std::find_if_not(groups.cbegin(), groups.cend(), [&size](const auto &curr) {
    1387  const std::size_t diff = (0u + ... + curr.owned(type<Owned>()));
    1388  return !diff || (size > (curr.extent[0] + curr.extent[1] + curr.extent[2]));
    1389  });
    1390 
    1391  const auto prev = std::find_if(std::make_reverse_iterator(next), groups.crend(), [](const auto &curr) {
    1392  return (0u + ... + curr.owned(type<Owned>()));
    1393  });
    1394 
    1395  maybe_valid_if = (next == groups.cend() ? maybe_valid_if : next->group.get());
    1396  discard_if = (prev == groups.crend() ? discard_if : prev->group.get());
    1397  handler = static_cast<handler_type *>(groups.insert(next, std::move(gdata))->group.get());
    1398  }
    1399 
    1400  ((std::get<pool_type<Owned> *>(cpools)->super = std::max(std::get<pool_type<Owned> *>(cpools)->super, size)), ...);
    1401 
    1402  (std::get<pool_type<Owned> *>(cpools)->on_construct().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if<Owned>>(*handler), ...);
    1403  (std::get<pool_type<Get> *>(cpools)->on_construct().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if<Get>>(*handler), ...);
    1404  (std::get<pool_type<Exclude> *>(cpools)->on_destroy().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if<Exclude>>(*handler), ...);
    1405 
    1406  (std::get<pool_type<Owned> *>(cpools)->on_destroy().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...);
    1407  (std::get<pool_type<Get> *>(cpools)->on_destroy().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...);
    1408  (std::get<pool_type<Exclude> *>(cpools)->on_construct().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...);
    1409 
    1410  const auto *cpool = std::min({
    1411  static_cast<sparse_set<Entity> *>(std::get<pool_type<Owned> *>(cpools))...,
    1412  static_cast<sparse_set<Entity> *>(std::get<pool_type<Get> *>(cpools))...
    1413  }, [](const auto *lhs, const auto *rhs) {
    1414  return lhs->size() < rhs->size();
    1415  });
    1416 
    1417  // we cannot iterate backwards because we want to leave behind valid entities in case of owned types
    1418  std::for_each(cpool->data(), cpool->data() + cpool->size(), [cpools, handler](const auto entity) {
    1419  if((std::get<pool_type<Owned> *>(cpools)->has(entity) && ...)
    1420  && (std::get<pool_type<Get> *>(cpools)->has(entity) && ...)
    1421  && !(std::get<pool_type<Exclude> *>(cpools)->has(entity) || ...))
    1422  {
    1423  if constexpr(sizeof...(Owned) == 0) {
    1424  handler->set.construct(entity);
    1425  } else {
    1426  if(!(std::get<0>(cpools)->index(entity) < handler->owned)) {
    1427  const auto pos = handler->owned++;
    1428  (std::get<pool_type<Owned> *>(cpools)->swap(std::get<pool_type<Owned> *>(cpools)->data()[pos], entity), ...);
    1429  }
    1430  }
    1431  }
    1432  });
    1433  }
    1434 
    1435  if constexpr(sizeof...(Owned) == 0) {
    1436  return { &handler->set, std::get<pool_type<Get> *>(cpools)... };
    1437  } else {
    1438  return { &std::get<0>(cpools)->super, &handler->owned, std::get<pool_type<Owned> *>(cpools)... , std::get<pool_type<Get> *>(cpools)... };
    1439  }
    1440  }
    1441 
    1452  template<typename... Owned, typename... Get, typename... Exclude>
    1453  entt::basic_group<Entity, exclude_t<Exclude...>, get_t<Get...>, Owned...> group(get_t<Get...>, exclude_t<Exclude...> = {}) const {
    1454  static_assert(std::conjunction_v<std::is_const<Owned>..., std::is_const<Get>...>);
    1455  return const_cast<basic_registry *>(this)->group<Owned...>(entt::get<Get...>, exclude<Exclude...>);
    1456  }
    1457 
    1467  template<typename... Owned, typename... Exclude>
    1468  entt::basic_group<Entity, exclude_t<Exclude...>, get_t<>, Owned...> group(exclude_t<Exclude...> = {}) {
    1469  return group<Owned...>(entt::get<>, exclude<Exclude...>);
    1470  }
    1471 
    1481  template<typename... Owned, typename... Exclude>
    1482  entt::basic_group<Entity, exclude_t<Exclude...>, get_t<>, Owned...> group(exclude_t<Exclude...> = {}) const {
    1483  static_assert(std::conjunction_v<std::is_const<Owned>...>);
    1484  return const_cast<basic_registry *>(this)->group<Owned...>(exclude<Exclude...>);
    1485  }
    1486 
    1507  template<typename It>
    1509  std::vector<const sparse_set<Entity> *> selected(std::distance(first, last));
    1510 
    1511  std::transform(first, last, selected.begin(), [this](const component ctype) {
    1512  auto it = std::find_if(pools.begin(), pools.end(), [ctype = to_integer(ctype)](const auto &pdata) {
    1513  return pdata.pool && pdata.runtime_type == ctype;
    1514  });
    1515 
    1516  return it != pools.cend() && it->pool ? it->pool.get() : nullptr;
    1517  });
    1518 
    1519  return { std::move(selected) };
    1520  }
    1521 
    1555  template<typename... Component, typename... Exclude>
    1557  static_assert(std::conjunction_v<std::is_copy_constructible<Component>...>);
    1558  basic_registry other;
    1559 
    1560  other.pools.resize(pools.size());
    1561 
    1562  for(auto pos = pools.size(); pos; --pos) {
    1563  const auto &pdata = pools[pos-1];
    1564  ENTT_ASSERT(!sizeof...(Component) || !pdata.pool || pdata.clone);
    1565 
    1566  if(pdata.pool && pdata.clone
    1567  && (!sizeof...(Component) || ... || (pdata.runtime_type == to_integer(type<Component>())))
    1568  && ((pdata.runtime_type != to_integer(type<Exclude>())) && ...))
    1569  {
    1570  auto &curr = other.pools[pos-1];
    1571  curr.remove = pdata.remove;
    1572  curr.clone = pdata.clone;
    1573  curr.stomp = pdata.stomp;
    1574  curr.pool = pdata.clone ? pdata.clone(*pdata.pool) : nullptr;
    1575  curr.runtime_type = pdata.runtime_type;
    1576  }
    1577  }
    1578 
    1579  other.skip_family_pools = skip_family_pools;
    1580  other.destroyed = destroyed;
    1581  other.entities = entities;
    1582 
    1583  other.pools.erase(std::remove_if(other.pools.begin()+skip_family_pools, other.pools.end(), [](const auto &pdata) {
    1584  return !pdata.pool;
    1585  }), other.pools.end());
    1586 
    1587  return other;
    1588  }
    1589 
    1620  template<typename... Component, typename... Exclude>
    1621  void stomp(const entity_type dst, const entity_type src, const basic_registry &other, exclude_t<Exclude...> = {}) {
    1622  const entity_type entt[1]{dst};
    1623  stomp<Component...>(std::begin(entt), std::end(entt), src, other, exclude<Exclude...>);
    1624  }
    1625 
    1639  template<typename... Component, typename It, typename... Exclude>
    1640  void stomp(It first, It last, const entity_type src, const basic_registry &other, exclude_t<Exclude...> = {}) {
    1641  static_assert(sizeof...(Component) == 0 || sizeof...(Exclude) == 0);
    1642 
    1643  for(auto pos = other.pools.size(); pos; --pos) {
    1644  const auto &pdata = other.pools[pos-1];
    1645  ENTT_ASSERT(!sizeof...(Component) || !pdata.pool || pdata.stomp);
    1646 
    1647  if(pdata.pool && pdata.stomp
    1648  && (!sizeof...(Component) || ... || (pdata.runtime_type == to_integer(type<Component>())))
    1649  && ((pdata.runtime_type != to_integer(type<Exclude>())) && ...)
    1650  && pdata.pool->has(src))
    1651  {
    1652  std::for_each(first, last, [this, &pdata, src](const auto entity) {
    1653  pdata.stomp(*pdata.pool, src, *this, entity);
    1654  });
    1655  }
    1656  }
    1657  }
    1658 
    1669  entt::basic_snapshot<Entity> snapshot() const ENTT_NOEXCEPT {
    1670  using follow_fn_type = entity_type(const basic_registry &, const entity_type);
    1671 
    1672  const auto head = to_integer(destroyed);
    1673  const entity_type seed = (destroyed == null) ? destroyed : entity_type{head | (to_integer(entities[head]) & (traits_type::version_mask << traits_type::entity_shift))};
    1674 
    1675  follow_fn_type *follow = [](const basic_registry &reg, const entity_type entity) -> entity_type {
    1676  const auto &others = reg.entities;
    1677  const auto entt = to_integer(entity) & traits_type::entity_mask;
    1678  const auto curr = to_integer(others[entt]) & traits_type::entity_mask;
    1679  return entity_type{curr | (to_integer(others[curr]) & (traits_type::version_mask << traits_type::entity_shift))};
    1680  };
    1681 
    1682  return { this, seed, follow };
    1683  }
    1684 
    1701  using force_fn_type = void(basic_registry &, const entity_type, const bool);
    1702 
    1703  force_fn_type *force = [](basic_registry &reg, const entity_type entity, const bool discard) {
    1704  const auto entt = to_integer(entity) & traits_type::entity_mask;
    1705  auto &others = reg.entities;
    1706 
    1707  if(!(entt < others.size())) {
    1708  auto curr = others.size();
    1709  others.resize(entt + 1);
    1710 
    1711  std::generate(others.data() + curr, others.data() + entt, [curr]() mutable {
    1712  return entity_type(curr++);
    1713  });
    1714  }
    1715 
    1716  others[entt] = entity;
    1717 
    1718  if(discard) {
    1719  reg.destroy(entity);
    1720  const auto version = to_integer(entity) & (traits_type::version_mask << traits_type::entity_shift);
    1721  others[entt] = entity_type{(to_integer(others[entt]) & traits_type::entity_mask) | version};
    1722  }
    1723  };
    1724 
    1725  reset();
    1726  entities.clear();
    1727  destroyed = null;
    1728 
    1729  return { this, force };
    1730  }
    1731 
    1743  template<typename Type, typename... Args>
    1744  Type & set(Args &&... args) {
    1745  const auto ctype = runtime_type<Type, context_family>();
    1746  auto it = std::find_if(vars.begin(), vars.end(), [ctype](const auto &candidate) {
    1747  return candidate.runtime_type == ctype;
    1748  });
    1749 
    1750  if(it == vars.cend()) {
    1751  vars.push_back({
    1752  decltype(ctx_variable::value){new Type{std::forward<Args>(args)...}, [](void *ptr) { delete static_cast<Type *>(ptr); }},
    1753  ctype
    1754  });
    1755 
    1756  it = std::prev(vars.end());
    1757  } else {
    1758  it->value.reset(new Type{std::forward<Args>(args)...});
    1759  }
    1760 
    1761  return *static_cast<Type *>(it->value.get());
    1762  }
    1763 
    1768  template<typename Type>
    1769  void unset() {
    1770  vars.erase(std::remove_if(vars.begin(), vars.end(), [](auto &var) {
    1771  return var.runtime_type == runtime_type<Type, context_family>();
    1772  }), vars.end());
    1773  }
    1774 
    1786  template<typename Type, typename... Args>
    1787  Type & ctx_or_set(Args &&... args) {
    1788  auto *value = try_ctx<Type>();
    1789  return value ? *value : set<Type>(std::forward<Args>(args)...);
    1790  }
    1791 
    1798  template<typename Type>
    1799  const Type * try_ctx() const ENTT_NOEXCEPT {
    1800  const auto it = std::find_if(vars.begin(), vars.end(), [](const auto &var) {
    1801  return var.runtime_type == runtime_type<Type, context_family>();
    1802  });
    1803 
    1804  return (it == vars.cend()) ? nullptr : static_cast<const Type *>(it->value.get());
    1805  }
    1806 
    1808  template<typename Type>
    1809  Type * try_ctx() ENTT_NOEXCEPT {
    1810  return const_cast<Type *>(std::as_const(*this).template try_ctx<Type>());
    1811  }
    1812 
    1825  template<typename Type>
    1826  const Type & ctx() const ENTT_NOEXCEPT {
    1827  const auto *instance = try_ctx<Type>();
    1828  ENTT_ASSERT(instance);
    1829  return *instance;
    1830  }
    1831 
    1833  template<typename Type>
    1834  Type & ctx() ENTT_NOEXCEPT {
    1835  return const_cast<Type &>(std::as_const(*this).template ctx<Type>());
    1836  }
    1837 
    1838 private:
    1839  mutable std::size_t skip_family_pools{};
    1840  mutable std::vector<pool_data> pools{};
    1841  std::vector<group_data> groups{};
    1842  std::vector<ctx_variable> vars{};
    1843  std::vector<entity_type> entities{};
    1844  entity_type destroyed{null};
    1845 };
    1846 
    1847 
    1848 }
    1849 
    1850 
    1851 #endif // ENTT_ENTITY_REGISTRY_HPP
    bool orphan(const entity_type entity) const
    Checks if an entity has components assigned.
    Definition: registry.hpp:1222
    -
    void create(It first, It last, entity_type src, const basic_registry &other, exclude_t< Exclude... >={})
    Assigns each element in a range an entity from a prototype entity.
    Definition: registry.hpp:649
    -
    void orphans(Func func) const
    Iterates orphans and applies them the given function object.
    Definition: registry.hpp:1251
    -
    version_type current(const entity_type entity) const ENTT_NOEXCEPT
    Returns the actual version for an entity identifier.
    Definition: registry.hpp:536
    -
    void reset()
    Resets the pool of the given component.
    Definition: registry.hpp:1153
    -
    decltype(auto) assign_or_replace(const entity_type entity, Args &&... args)
    Assigns or replaces the given component for an entity.
    Definition: registry.hpp:924
    -
    decltype(auto) replace(const entity_type entity, Args &&... args)
    Replaces the given component for an entity.
    Definition: registry.hpp:896
    - -
    basic_registry() ENTT_NOEXCEPT=default
    Default constructor.
    -
    Group.
    Definition: fwd.hpp:25
    -
    static component type() ENTT_NOEXCEPT
    Returns the opaque identifier of a component.
    Definition: registry.hpp:332
    -
    size_type size() const ENTT_NOEXCEPT
    Returns the number of elements in a sparse set.
    Definition: sparse_set.hpp:282
    -
    object_type & construct(const entity_type entt, Args &&... args)
    Assigns an entity to a storage and constructs its object.
    Definition: storage.hpp:322
    -
    auto on_replace() ENTT_NOEXCEPT
    Returns a sink object for the given component.
    Definition: registry.hpp:989
    -
    static version_type version(const entity_type entity) ENTT_NOEXCEPT
    Returns the version stored along with an entity identifier.
    Definition: registry.hpp:519
    -
    void reserve(const size_type cap)
    Increases the capacity of the registry or of the pools for the given components.
    Definition: registry.hpp:392
    -
    void destroy(const entity_type entity)
    Destroys an entity and lets the registry recycle the identifier.
    Definition: registry.hpp:682
    -
    const entity_type * data() const ENTT_NOEXCEPT
    Direct access to the list of entities of a given pool.
    Definition: registry.hpp:491
    -
    decltype(auto) get([[maybe_unused]] const entity_type entity) const
    Returns references to the given components for an entity.
    Definition: registry.hpp:789
    -
    entt::basic_view< Entity, exclude_t< Exclude... >, Component... > view(exclude_t< Exclude... >={}) const
    Returns a view for the given components.
    Definition: registry.hpp:1301
    -
    auto on_destroy() ENTT_NOEXCEPT
    Returns a sink object for the given component.
    Definition: registry.hpp:1021
    -
    entt::basic_group< Entity, exclude_t< Exclude... >, get_t<>, Owned... > group(exclude_t< Exclude... >={}) const
    Returns a group for the given components.
    Definition: registry.hpp:1482
    -
    void reset(const entity_type entity)
    Resets the given component for an entity.
    Definition: registry.hpp:1136
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... > group(get_t< Get... >, exclude_t< Exclude... >={}) const
    Returns a group for the given components.
    Definition: registry.hpp:1453
    -
    bool has(const entity_type entt) const ENTT_NOEXCEPT
    Checks if a sparse set contains an entity.
    Definition: sparse_set.hpp:364
    -
    Type & ctx() ENTT_NOEXCEPT
    Returns a reference to an object in the context of the registry.
    Definition: registry.hpp:1834
    -
    static entity_type entity(const entity_type entity) ENTT_NOEXCEPT
    Returns the entity identifier without the version.
    Definition: registry.hpp:510
    -
    entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... > group(get_t< Get... >, exclude_t< Exclude... >={})
    Returns a group for the given components.
    Definition: registry.hpp:1345
    -
    sink(sigh< Ret(Args...)> &) ENTT_NOEXCEPT -> sink< Ret(Args...)>
    Deduction guide.
    -
    decltype(auto) get_or_assign(const entity_type entity, Args &&... args) ENTT_NOEXCEPT
    Returns a reference to the given component for an entity.
    Definition: registry.hpp:836
    -
    constexpr exclude_t< Type... > exclude
    Variable template for exclusion lists.
    Definition: utility.hpp:24
    -
    const object_type & get(const entity_type entt) const ENTT_NOEXCEPT
    Returns the object associated with an entity.
    Definition: storage.hpp:280
    -
    entt::basic_view< Entity, exclude_t< Exclude... >, Component... > view(exclude_t< Exclude... >={})
    Returns a view for the given components.
    Definition: registry.hpp:1294
    -
    size_type alive() const ENTT_NOEXCEPT
    Returns the number of entities still in use.
    Definition: registry.hpp:367
    -
    void shrink_to_fit()
    Requests the removal of unused capacity for the given components.
    Definition: registry.hpp:425
    -
    entt::basic_snapshot< Entity > snapshot() const ENTT_NOEXCEPT
    Returns a temporary object to use to create snapshots.
    Definition: registry.hpp:1669
    -
    entt::basic_group< Entity, exclude_t< Exclude... >, get_t<>, Owned... > group(exclude_t< Exclude... >={})
    Returns a group for the given components.
    Definition: registry.hpp:1468
    -
    void destroy(It first, It last)
    Destroys all the entities in a range.
    Definition: registry.hpp:706
    -
    constexpr auto null
    Compile-time constant for null entities.
    Definition: entity.hpp:168
    -
    size_type size() const ENTT_NOEXCEPT
    Returns the number of entities created so far.
    Definition: registry.hpp:359
    -
    void stomp(It first, It last, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})
    Stomps the entities in a range and their components.
    Definition: registry.hpp:1640
    -
    Utility class to restore a snapshot as a whole.
    Definition: fwd.hpp:41
    -
    Entity entity_type
    Underlying entity identifier.
    Definition: registry.hpp:307
    -
    auto on_construct() ENTT_NOEXCEPT
    Returns a sink object for the given component.
    Definition: registry.hpp:958
    -
    bool valid(const entity_type entity) const ENTT_NOEXCEPT
    Checks if an entity identifier refers to a valid entity.
    Definition: registry.hpp:500
    -
    Fast and reliable entity-component system.
    Definition: fwd.hpp:13
    -
    View.
    Definition: fwd.hpp:17
    -
    basic_registry clone(exclude_t< Exclude... >={}) const
    Returns a full or partial copy of a registry.
    Definition: registry.hpp:1556
    -
    void prepare()
    Prepares pools for the given types if required.
    Definition: registry.hpp:341
    -
    entity_type create(entity_type src, const basic_registry &other, exclude_t< Exclude... >={})
    Creates a new entity from a prototype entity.
    Definition: registry.hpp:620
    -
    size_type capacity() const ENTT_NOEXCEPT
    Returns the capacity of the pool for the given component.
    Definition: registry.hpp:406
    -
    void each(Func func) const
    Iterates all the entities that are still in use.
    Definition: registry.hpp:1197
    -
    basic_snapshot_loader< Entity > loader() ENTT_NOEXCEPT
    Returns a temporary object to use to load snapshots.
    Definition: registry.hpp:1700
    -
    const Component * raw() const ENTT_NOEXCEPT
    Direct access to the list of components of a given pool.
    Definition: registry.hpp:467
    -
    auto try_get([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT
    Returns pointers to the given components for an entity.
    Definition: registry.hpp:855
    -
    auto create(It first, It last)
    Assigns each element in a range an entity.
    Definition: registry.hpp:591
    -
    Function object to wrap std::sort in a class type.
    Definition: algorithm.hpp:23
    -
    const Type & ctx() const ENTT_NOEXCEPT
    Returns a reference to an object in the context of the registry.
    Definition: registry.hpp:1826
    -
    typename traits_type::version_type version_type
    Underlying version type.
    Definition: registry.hpp:309
    -
    void reset()
    Resets a whole registry.
    Definition: registry.hpp:1172
    -
    iterator_type batch(It first, It last, Args &&... args)
    Assigns one or more entities to a storage and default constructs or copy constructs their objects...
    Definition: storage.hpp:356
    -
    decltype(auto) assign(const entity_type entity, [[maybe_unused]] Args &&... args)
    Assigns the given component to an entity.
    Definition: registry.hpp:732
    -
    Alias for exclusion lists.
    Definition: utility.hpp:16
    -
    void sort()
    Sorts two pools of components in the same way.
    Definition: registry.hpp:1115
    -
    const Type * try_ctx() const ENTT_NOEXCEPT
    Returns a pointer to an object in the context of the registry.
    Definition: registry.hpp:1799
    -
    entt::basic_runtime_view< Entity > runtime_view(It first, It last) const
    Returns a runtime view for the given components.
    Definition: registry.hpp:1508
    -
    size_type capacity() const ENTT_NOEXCEPT
    Returns the number of entities that a registry has currently allocated space for. ...
    Definition: registry.hpp:415
    -
    Type & ctx_or_set(Args &&... args)
    Binds an object to the context of the registry.
    Definition: registry.hpp:1787
    -
    Component * raw() ENTT_NOEXCEPT
    Direct access to the list of components of a given pool.
    Definition: registry.hpp:473
    -
    auto create()
    Creates a new entity and returns it.
    Definition: registry.hpp:565
    -
    Alias for lists of observed components.
    Definition: utility.hpp:32
    -
    void stomp(const entity_type dst, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})
    Stomps an entity and its components.
    Definition: registry.hpp:1621
    -
    auto try_get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT
    Returns pointers to the given components for an entity.
    Definition: registry.hpp:867
    -
    Utility class to create snapshots from a registry.
    Definition: fwd.hpp:37
    -
    void sort(Compare compare, Sort algo=Sort{}, Args &&... args)
    Sorts the pool of entities for the given component.
    Definition: registry.hpp:1073
    -
    void destroy(const entity_type entt)
    Removes an entity from a storage and destroys its object.
    Definition: storage.hpp:379
    -
    bool sortable() const ENTT_NOEXCEPT
    Checks whether the given components belong to any group.
    Definition: registry.hpp:1313
    -
    void unset()
    Unsets a context variable if it exists.
    Definition: registry.hpp:1769
    -
    bool empty() const ENTT_NOEXCEPT
    Checks whether the registry or the pools of the given components are empty.
    Definition: registry.hpp:441
    -
    Runtime view.
    Definition: fwd.hpp:21
    -
    bool has(const entity_type entity) const ENTT_NOEXCEPT
    Checks if an entity has all the given components.
    Definition: registry.hpp:769
    -
    size_type size() const ENTT_NOEXCEPT
    Returns the number of existing components of the given type.
    Definition: registry.hpp:351
    -
    Type * try_ctx() ENTT_NOEXCEPT
    Returns a pointer to an object in the context of the registry.
    Definition: registry.hpp:1809
    -
    std::size_t size_type
    Unsigned integer type.
    Definition: registry.hpp:311
    +
    1 #ifndef ENTT_ENTITY_REGISTRY_HPP
    +
    2 #define ENTT_ENTITY_REGISTRY_HPP
    +
    3 
    +
    4 
    +
    5 #include <tuple>
    +
    6 #include <vector>
    +
    7 #include <memory>
    +
    8 #include <utility>
    +
    9 #include <cstddef>
    +
    10 #include <iterator>
    +
    11 #include <algorithm>
    +
    12 #include <type_traits>
    +
    13 #include "../config/config.h"
    +
    14 #include "../core/family.hpp"
    +
    15 #include "../core/algorithm.hpp"
    +
    16 #include "../core/type_traits.hpp"
    +
    17 #include "../signal/delegate.hpp"
    +
    18 #include "../signal/sigh.hpp"
    +
    19 #include "runtime_view.hpp"
    +
    20 #include "sparse_set.hpp"
    +
    21 #include "snapshot.hpp"
    +
    22 #include "storage.hpp"
    +
    23 #include "utility.hpp"
    +
    24 #include "entity.hpp"
    +
    25 #include "group.hpp"
    +
    26 #include "view.hpp"
    +
    27 #include "fwd.hpp"
    +
    28 
    +
    29 
    +
    30 namespace entt {
    +
    31 
    +
    32 
    +
    43 template<typename Entity>
    +
    44 class basic_registry {
    +
    45  using context_family = family<struct internal_registry_context_family>;
    +
    46  using component_family = family<struct internal_registry_component_family>;
    +
    47  using traits_type = entt_traits<std::underlying_type_t<Entity>>;
    +
    48 
    +
    49  template<typename Component>
    +
    50  struct pool_handler: storage<Entity, Component> {
    +
    51  std::size_t super{};
    +
    52 
    +
    53  template<typename... Args>
    +
    54  pool_handler(Args &&... args)
    +
    55  : storage<Entity, Component>{std::forward<Args>(args)...},
    +
    56  super{}
    +
    57  {}
    +
    58 
    +
    59  auto on_construct() ENTT_NOEXCEPT {
    +
    60  return sink{construction};
    +
    61  }
    +
    62 
    +
    63  auto on_replace() ENTT_NOEXCEPT {
    +
    64  return sink{update};
    +
    65  }
    +
    66 
    +
    67  auto on_destroy() ENTT_NOEXCEPT {
    +
    68  return sink{destruction};
    +
    69  }
    +
    70 
    +
    71  template<typename... Args>
    +
    72  decltype(auto) assign(basic_registry &owner, const Entity entt, Args &&... args) {
    +
    73  if constexpr(ENTT_ENABLE_ETO(Component)) {
    + +
    75  construction.publish(entt, owner, Component{});
    +
    76  return Component{std::forward<Args>(args)...};
    +
    77  } else {
    +
    78  auto &component = storage<Entity, Component>::construct(entt, std::forward<Args>(args)...);
    +
    79  construction.publish(entt, owner, component);
    +
    80  return component;
    +
    81  }
    +
    82  }
    +
    83 
    +
    84  template<typename It, typename... Args>
    +
    85  auto batch(basic_registry &owner, It first, It last, Args &&... args) {
    +
    86  auto it = storage<Entity, Component>::batch(first, last, std::forward<Args>(args)...);
    +
    87 
    +
    88  if(!construction.empty()) {
    +
    89  std::for_each(first, last, [this, &owner, it](const auto entt) mutable {
    +
    90  construction.publish(entt, owner, *(it++));
    +
    91  });
    +
    92  }
    +
    93 
    +
    94  return it;
    +
    95  }
    +
    96 
    +
    97  void remove(basic_registry &owner, const Entity entt) {
    +
    98  destruction.publish(entt, owner);
    + +
    100  }
    +
    101 
    +
    102  template<typename... Args>
    +
    103  decltype(auto) replace(basic_registry &owner, const Entity entt, Args &&... args) {
    +
    104  if constexpr(ENTT_ENABLE_ETO(Component)) {
    +
    105  ENTT_ASSERT((storage<Entity, Component>::has(entt)));
    +
    106  update.publish(entt, owner, Component{});
    +
    107  return Component{std::forward<Args>(args)...};
    +
    108  } else {
    +
    109  Component component{std::forward<Args>(args)...};
    +
    110  update.publish(entt, owner, component);
    +
    111  return (storage<Entity, Component>::get(entt) = std::move(component));
    +
    112  }
    +
    113  }
    +
    114 
    +
    115  private:
    +
    116  using reference_type = std::conditional_t<ENTT_ENABLE_ETO(Component), const Component &, Component &>;
    +
    117  sigh<void(const Entity, basic_registry &, reference_type)> construction{};
    +
    118  sigh<void(const Entity, basic_registry &, reference_type)> update{};
    +
    119  sigh<void(const Entity, basic_registry &)> destruction{};
    +
    120  };
    +
    121 
    +
    122  template<typename Component>
    +
    123  using pool_type = pool_handler<std::decay_t<Component>>;
    +
    124 
    +
    125  template<typename...>
    +
    126  struct group_handler;
    +
    127 
    +
    128  template<typename... Exclude, typename... Get>
    +
    129  struct group_handler<exclude_t<Exclude...>, get_t<Get...>> {
    +
    130  const std::tuple<pool_type<Get> *..., pool_type<Exclude> *...> cpools{};
    +
    131  sparse_set<Entity> set{};
    +
    132 
    +
    133  template<typename Component>
    +
    134  void maybe_valid_if(const Entity entt) {
    +
    135  if constexpr(std::disjunction_v<std::is_same<Get, Component>...>) {
    +
    136  if(((std::is_same_v<Component, Get> || std::get<pool_type<Get> *>(cpools)->has(entt)) && ...)
    +
    137  && (!std::get<pool_type<Exclude> *>(cpools)->has(entt) && ...)
    +
    138  && !set.has(entt))
    +
    139  {
    +
    140  set.construct(entt);
    +
    141  }
    +
    142  } else if constexpr(std::disjunction_v<std::is_same<Exclude, Component>...>) {
    +
    143  if((std::get<pool_type<Get> *>(cpools)->has(entt) && ...)
    +
    144  && ((std::is_same_v<Exclude, Component> || !std::get<pool_type<Exclude> *>(cpools)->has(entt)) && ...)
    +
    145  && !set.has(entt))
    +
    146  {
    +
    147  set.construct(entt);
    +
    148  }
    +
    149  }
    +
    150  }
    +
    151 
    +
    152  void discard_if(const Entity entt) {
    +
    153  if(set.has(entt)) {
    +
    154  set.destroy(entt);
    +
    155  }
    +
    156  }
    +
    157  };
    +
    158 
    +
    159  template<typename... Exclude, typename... Get, typename... Owned>
    +
    160  struct group_handler<exclude_t<Exclude...>, get_t<Get...>, Owned...> {
    +
    161  const std::tuple<pool_type<Owned> *..., pool_type<Get> *..., pool_type<Exclude> *...> cpools{};
    +
    162  std::size_t owned{};
    +
    163 
    +
    164  template<typename Component>
    +
    165  void maybe_valid_if(const Entity entt) {
    +
    166  if constexpr(std::disjunction_v<std::is_same<Owned, Component>..., std::is_same<Get, Component>...>) {
    +
    167  if(((std::is_same_v<Component, Owned> || std::get<pool_type<Owned> *>(cpools)->has(entt)) && ...)
    +
    168  && ((std::is_same_v<Component, Get> || std::get<pool_type<Get> *>(cpools)->has(entt)) && ...)
    +
    169  && (!std::get<pool_type<Exclude> *>(cpools)->has(entt) && ...)
    +
    170  && !(std::get<0>(cpools)->index(entt) < owned))
    +
    171  {
    +
    172  const auto pos = owned++;
    +
    173  (std::get<pool_type<Owned> *>(cpools)->swap(std::get<pool_type<Owned> *>(cpools)->data()[pos], entt), ...);
    +
    174  }
    +
    175  } else if constexpr(std::disjunction_v<std::is_same<Exclude, Component>...>) {
    +
    176  if((std::get<pool_type<Owned> *>(cpools)->has(entt) && ...)
    +
    177  && (std::get<pool_type<Get> *>(cpools)->has(entt) && ...)
    +
    178  && ((std::is_same_v<Exclude, Component> || !std::get<pool_type<Exclude> *>(cpools)->has(entt)) && ...)
    +
    179  && !(std::get<0>(cpools)->index(entt) < owned))
    +
    180  {
    +
    181  const auto pos = owned++;
    +
    182  (std::get<pool_type<Owned> *>(cpools)->swap(std::get<pool_type<Owned> *>(cpools)->data()[pos], entt), ...);
    +
    183  }
    +
    184  }
    +
    185  }
    +
    186 
    +
    187  void discard_if(const Entity entt) {
    +
    188  if(std::get<0>(cpools)->has(entt) && std::get<0>(cpools)->index(entt) < owned) {
    +
    189  const auto pos = --owned;
    +
    190  (std::get<pool_type<Owned> *>(cpools)->swap(std::get<pool_type<Owned> *>(cpools)->data()[pos], entt), ...);
    +
    191  }
    +
    192  }
    +
    193  };
    +
    194 
    +
    195  struct pool_data {
    +
    196  std::unique_ptr<sparse_set<Entity>> pool;
    +
    197  void(* remove)(sparse_set<Entity> &, basic_registry &, const Entity);
    +
    198  std::unique_ptr<sparse_set<Entity>>(* clone)(const sparse_set<Entity> &);
    +
    199  void(* stomp)(const sparse_set<Entity> &, const Entity, basic_registry &, const Entity);
    +
    200  ENTT_ID_TYPE runtime_type;
    +
    201  };
    +
    202 
    +
    203  struct group_data {
    +
    204  std::size_t extent[3];
    +
    205  std::unique_ptr<void, void(*)(void *)> group;
    +
    206  bool(* owned)(const component) ENTT_NOEXCEPT;
    +
    207  bool(* get)(const component) ENTT_NOEXCEPT;
    +
    208  bool(* exclude)(const component) ENTT_NOEXCEPT;
    +
    209  };
    +
    210 
    +
    211  struct ctx_variable {
    +
    212  std::unique_ptr<void, void(*)(void *)> value;
    +
    213  ENTT_ID_TYPE runtime_type;
    +
    214  };
    +
    215 
    +
    216  template<typename Type, typename Family>
    +
    217  static ENTT_ID_TYPE runtime_type() ENTT_NOEXCEPT {
    +
    218  if constexpr(is_named_type_v<Type>) {
    +
    219  return named_type_traits_v<Type>;
    +
    220  } else {
    +
    221  return Family::template type<std::decay_t<Type>>;
    +
    222  }
    +
    223  }
    +
    224 
    +
    225  auto generate() {
    +
    226  Entity entt;
    +
    227 
    +
    228  if(destroyed == null) {
    +
    229  entt = entities.emplace_back(entity_type(entities.size()));
    +
    230  // traits_type::entity_mask is reserved to allow for null identifiers
    +
    231  ENTT_ASSERT(to_integer(entt) < traits_type::entity_mask);
    +
    232  } else {
    +
    233  const auto curr = to_integer(destroyed);
    +
    234  const auto version = to_integer(entities[curr]) & (traits_type::version_mask << traits_type::entity_shift);
    +
    235  destroyed = entity_type{to_integer(entities[curr]) & traits_type::entity_mask};
    +
    236  entt = entity_type{curr | version};
    +
    237  entities[curr] = entt;
    +
    238  }
    +
    239 
    +
    240  return entt;
    +
    241  }
    +
    242 
    +
    243  void release(const Entity entity) {
    +
    244  // lengthens the implicit list of destroyed entities
    +
    245  const auto entt = to_integer(entity) & traits_type::entity_mask;
    +
    246  const auto version = ((to_integer(entity) >> traits_type::entity_shift) + 1) << traits_type::entity_shift;
    +
    247  const auto node = to_integer(destroyed) | version;
    +
    248  entities[entt] = Entity{node};
    +
    249  destroyed = Entity{entt};
    +
    250  }
    +
    251 
    +
    252  template<typename Component>
    +
    253  const pool_type<Component> * assure() const {
    +
    254  const auto ctype = to_integer(type<Component>());
    +
    255  pool_data *pdata = nullptr;
    +
    256 
    +
    257  if constexpr(is_named_type_v<Component>) {
    +
    258  const auto it = std::find_if(pools.begin()+skip_family_pools, pools.end(), [ctype](const auto &candidate) {
    +
    259  return candidate.runtime_type == ctype;
    +
    260  });
    +
    261 
    +
    262  pdata = (it == pools.cend() ? &pools.emplace_back() : &(*it));
    +
    263  } else {
    +
    264  if(!(ctype < skip_family_pools)) {
    +
    265  pools.reserve(pools.size()+ctype-skip_family_pools+1);
    +
    266 
    +
    267  while(!(ctype < skip_family_pools)) {
    +
    268  pools.emplace(pools.begin()+(skip_family_pools++), pool_data{});
    +
    269  }
    +
    270  }
    +
    271 
    +
    272  pdata = &pools[ctype];
    +
    273  }
    +
    274 
    +
    275  if(!pdata->pool) {
    +
    276  pdata->runtime_type = ctype;
    +
    277  pdata->pool = std::make_unique<pool_type<Component>>();
    +
    278 
    +
    279  pdata->remove = [](sparse_set<Entity> &cpool, basic_registry &owner, const Entity entt) {
    +
    280  static_cast<pool_type<Component> &>(cpool).remove(owner, entt);
    +
    281  };
    +
    282 
    +
    283  if constexpr(std::is_copy_constructible_v<std::decay_t<Component>>) {
    +
    284  pdata->clone = [](const sparse_set<Entity> &cpool) -> std::unique_ptr<sparse_set<Entity>> {
    +
    285  return std::make_unique<pool_type<Component>>(static_cast<const pool_type<Component> &>(cpool));
    +
    286  };
    +
    287 
    +
    288  pdata->stomp = [](const sparse_set<Entity> &cpool, const Entity from, basic_registry &other, const Entity to) {
    +
    289  other.assign_or_replace<Component>(to, static_cast<const pool_type<Component> &>(cpool).get(from));
    +
    290  };
    +
    291  } else {
    +
    292  pdata->clone = nullptr;
    +
    293  pdata->stomp = nullptr;
    +
    294  }
    +
    295  }
    +
    296 
    +
    297  return static_cast<pool_type<Component> *>(pdata->pool.get());
    +
    298  }
    +
    299 
    +
    300  template<typename Component>
    +
    301  pool_type<Component> * assure() {
    +
    302  return const_cast<pool_type<Component> *>(std::as_const(*this).template assure<Component>());
    +
    303  }
    +
    304 
    +
    305 public:
    +
    307  using entity_type = Entity;
    +
    309  using version_type = typename traits_type::version_type;
    +
    311  using size_type = std::size_t;
    +
    312 
    +
    314  basic_registry() ENTT_NOEXCEPT = default;
    +
    315 
    +
    317  basic_registry(basic_registry &&) = default;
    +
    318 
    +
    320  basic_registry & operator=(basic_registry &&) = default;
    +
    321 
    +
    331  template<typename Component>
    +
    332  static component type() ENTT_NOEXCEPT {
    +
    333  return component{runtime_type<Component, component_family>()};
    +
    334  }
    +
    335 
    +
    340  template<typename... Component>
    +
    341  void prepare() {
    +
    342  (assure<Component>(), ...);
    +
    343  }
    +
    344 
    +
    350  template<typename Component>
    +
    351  size_type size() const ENTT_NOEXCEPT {
    +
    352  return assure<Component>()->size();
    +
    353  }
    +
    354 
    +
    359  size_type size() const ENTT_NOEXCEPT {
    +
    360  return entities.size();
    +
    361  }
    +
    362 
    +
    367  size_type alive() const ENTT_NOEXCEPT {
    +
    368  auto sz = entities.size();
    +
    369  auto curr = destroyed;
    +
    370 
    +
    371  for(; curr != null; --sz) {
    +
    372  curr = entities[to_integer(curr) & traits_type::entity_mask];
    +
    373  }
    +
    374 
    +
    375  return sz;
    +
    376  }
    +
    377 
    +
    391  template<typename... Component>
    +
    392  void reserve(const size_type cap) {
    +
    393  if constexpr(sizeof...(Component) == 0) {
    +
    394  entities.reserve(cap);
    +
    395  } else {
    +
    396  (assure<Component>()->reserve(cap), ...);
    +
    397  }
    +
    398  }
    +
    399 
    +
    405  template<typename Component>
    +
    406  size_type capacity() const ENTT_NOEXCEPT {
    +
    407  return assure<Component>()->capacity();
    +
    408  }
    +
    409 
    +
    415  size_type capacity() const ENTT_NOEXCEPT {
    +
    416  return entities.capacity();
    +
    417  }
    +
    418 
    +
    424  template<typename... Component>
    +
    425  void shrink_to_fit() {
    +
    426  (assure<Component>()->shrink_to_fit(), ...);
    +
    427  }
    +
    428 
    +
    440  template<typename... Component>
    +
    441  bool empty() const ENTT_NOEXCEPT {
    +
    442  if constexpr(sizeof...(Component) == 0) {
    +
    443  return !alive();
    +
    444  } else {
    +
    445  return (assure<Component>()->empty() && ...);
    +
    446  }
    +
    447  }
    +
    448 
    +
    466  template<typename Component>
    +
    467  const Component * raw() const ENTT_NOEXCEPT {
    +
    468  return assure<Component>()->raw();
    +
    469  }
    +
    470 
    +
    472  template<typename Component>
    +
    473  Component * raw() ENTT_NOEXCEPT {
    +
    474  return const_cast<Component *>(std::as_const(*this).template raw<Component>());
    +
    475  }
    +
    476 
    +
    490  template<typename Component>
    +
    491  const entity_type * data() const ENTT_NOEXCEPT {
    +
    492  return assure<Component>()->data();
    +
    493  }
    +
    494 
    +
    500  bool valid(const entity_type entity) const ENTT_NOEXCEPT {
    +
    501  const auto pos = size_type(to_integer(entity) & traits_type::entity_mask);
    +
    502  return (pos < entities.size() && entities[pos] == entity);
    +
    503  }
    +
    504 
    +
    510  static entity_type entity(const entity_type entity) ENTT_NOEXCEPT {
    +
    511  return entity_type{to_integer(entity) & traits_type::entity_mask};
    +
    512  }
    +
    513 
    +
    519  static version_type version(const entity_type entity) ENTT_NOEXCEPT {
    +
    520  return version_type(to_integer(entity) >> traits_type::entity_shift);
    +
    521  }
    +
    522 
    +
    536  version_type current(const entity_type entity) const ENTT_NOEXCEPT {
    +
    537  const auto pos = size_type(to_integer(entity) & traits_type::entity_mask);
    +
    538  ENTT_ASSERT(pos < entities.size());
    +
    539  return version_type(to_integer(entities[pos]) >> traits_type::entity_shift);
    +
    540  }
    +
    541 
    +
    564  template<typename... Component>
    +
    565  auto create() {
    +
    566  if constexpr(sizeof...(Component) == 0) {
    +
    567  return generate();
    +
    568  } else {
    +
    569  const entity_type entt = generate();
    +
    570  return std::tuple<entity_type, decltype(assign<Component>({}))...>{entt, assign<Component>(entt)...};
    +
    571  }
    +
    572  }
    +
    573 
    +
    590  template<typename... Component, typename It>
    +
    591  auto create(It first, It last) {
    +
    592  std::generate(first, last, [this]() { return generate(); });
    +
    593 
    +
    594  if constexpr(sizeof...(Component) > 0) {
    +
    595  // the reverse iterators guarantee the ordering between entities and components (hint: the pools return begin())
    +
    596  return std::make_tuple(assure<Component>()->batch(*this, std::make_reverse_iterator(last), std::make_reverse_iterator(first))...);
    +
    597  }
    +
    598  }
    +
    599 
    +
    619  template<typename... Component, typename... Exclude>
    + +
    621  const auto entt = create();
    +
    622  stomp<Component...>(entt, src, other, exclude<Exclude...>);
    +
    623  return entt;
    +
    624  }
    +
    625 
    +
    648  template<typename... Component, typename It, typename... Exclude>
    +
    649  void create(It first, It last, entity_type src, const basic_registry &other, exclude_t<Exclude...> = {}) {
    +
    650  create(first, last);
    +
    651 
    +
    652  if constexpr(sizeof...(Component) == 0) {
    +
    653  stomp<Component...>(first, last, src, other, exclude<Exclude...>);
    +
    654  } else {
    +
    655  static_assert(sizeof...(Exclude) == 0);
    +
    656  (assure<Component>()->batch(*this, std::make_reverse_iterator(last), std::make_reverse_iterator(first), other.get<Component>(src)), ...);
    +
    657  }
    +
    658  }
    +
    659 
    +
    682  void destroy(const entity_type entity) {
    +
    683  ENTT_ASSERT(valid(entity));
    +
    684 
    +
    685  for(auto pos = pools.size(); pos; --pos) {
    +
    686  if(auto &pdata = pools[pos-1]; pdata.pool && pdata.pool->has(entity)) {
    +
    687  pdata.remove(*pdata.pool, *this, entity);
    +
    688  }
    +
    689  }
    +
    690 
    +
    691  // just a way to protect users from listeners that attach components
    +
    692  ENTT_ASSERT(orphan(entity));
    +
    693  release(entity);
    +
    694  }
    +
    695 
    +
    705  template<typename It>
    +
    706  void destroy(It first, It last) {
    +
    707  // useless this-> used to suppress a warning with clang
    +
    708  std::for_each(first, last, [this](const auto entity) { this->destroy(entity); });
    +
    709  }
    +
    710 
    +
    731  template<typename Component, typename... Args>
    +
    732  decltype(auto) assign(const entity_type entity, [[maybe_unused]] Args &&... args) {
    +
    733  ENTT_ASSERT(valid(entity));
    +
    734  return assure<Component>()->assign(*this, entity, std::forward<Args>(args)...);
    +
    735  }
    +
    736 
    +
    750  template<typename Component>
    +
    751  void remove(const entity_type entity) {
    +
    752  ENTT_ASSERT(valid(entity));
    +
    753  assure<Component>()->remove(*this, entity);
    +
    754  }
    +
    755 
    +
    768  template<typename... Component>
    +
    769  bool has(const entity_type entity) const ENTT_NOEXCEPT {
    +
    770  ENTT_ASSERT(valid(entity));
    +
    771  return (assure<Component>()->has(entity) && ...);
    +
    772  }
    +
    773 
    +
    788  template<typename... Component>
    +
    789  decltype(auto) get([[maybe_unused]] const entity_type entity) const {
    +
    790  ENTT_ASSERT(valid(entity));
    +
    791 
    +
    792  if constexpr(sizeof...(Component) == 1) {
    +
    793  return (assure<Component>()->get(entity), ...);
    +
    794  } else {
    +
    795  return std::tuple<decltype(get<Component>({}))...>{get<Component>(entity)...};
    +
    796  }
    +
    797  }
    +
    798 
    +
    800  template<typename... Component>
    +
    801  decltype(auto) get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT {
    +
    802  ENTT_ASSERT(valid(entity));
    +
    803 
    +
    804  if constexpr(sizeof...(Component) == 1) {
    +
    805  return (assure<Component>()->get(entity), ...);
    +
    806  } else {
    +
    807  return std::tuple<decltype(get<Component>({}))...>{get<Component>(entity)...};
    +
    808  }
    +
    809  }
    +
    810 
    +
    835  template<typename Component, typename... Args>
    +
    836  decltype(auto) get_or_assign(const entity_type entity, Args &&... args) ENTT_NOEXCEPT {
    +
    837  ENTT_ASSERT(valid(entity));
    +
    838  auto *cpool = assure<Component>();
    +
    839  return cpool->has(entity) ? cpool->get(entity) : cpool->assign(*this, entity, std::forward<Args>(args)...);
    +
    840  }
    +
    841 
    +
    854  template<typename... Component>
    +
    855  auto try_get([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT {
    +
    856  ENTT_ASSERT(valid(entity));
    +
    857 
    +
    858  if constexpr(sizeof...(Component) == 1) {
    +
    859  return (assure<Component>()->try_get(entity), ...);
    +
    860  } else {
    +
    861  return std::tuple<decltype(try_get<Component>({}))...>{try_get<Component>(entity)...};
    +
    862  }
    +
    863  }
    +
    864 
    +
    866  template<typename... Component>
    +
    867  auto try_get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT {
    +
    868  if constexpr(sizeof...(Component) == 1) {
    +
    869  return (assure<Component>()->try_get(entity), ...);
    +
    870  } else {
    +
    871  return std::tuple<decltype(try_get<Component>({}))...>{try_get<Component>(entity)...};
    +
    872  }
    +
    873  }
    +
    874 
    +
    895  template<typename Component, typename... Args>
    +
    896  decltype(auto) replace(const entity_type entity, Args &&... args) {
    +
    897  ENTT_ASSERT(valid(entity));
    +
    898  return assure<Component>()->replace(*this, entity, std::forward<Args>(args)...);
    +
    899  }
    +
    900 
    +
    923  template<typename Component, typename... Args>
    +
    924  decltype(auto) assign_or_replace(const entity_type entity, Args &&... args) {
    +
    925  ENTT_ASSERT(valid(entity));
    +
    926  auto *cpool = assure<Component>();
    +
    927  return cpool->has(entity) ? cpool->replace(*this, entity, std::forward<Args>(args)...) : cpool->assign(*this, entity, std::forward<Args>(args)...);
    +
    928  }
    +
    929 
    +
    957  template<typename Component>
    +
    958  auto on_construct() ENTT_NOEXCEPT {
    +
    959  return assure<Component>()->on_construct();
    +
    960  }
    +
    961 
    +
    988  template<typename Component>
    +
    989  auto on_replace() ENTT_NOEXCEPT {
    +
    990  return assure<Component>()->on_replace();
    +
    991  }
    +
    992 
    +
    1020  template<typename Component>
    +
    1021  auto on_destroy() ENTT_NOEXCEPT {
    +
    1022  return assure<Component>()->on_destroy();
    +
    1023  }
    +
    1024 
    +
    1072  template<typename Component, typename Compare, typename Sort = std_sort, typename... Args>
    +
    1073  void sort(Compare compare, Sort algo = Sort{}, Args &&... args) {
    +
    1074  auto *cpool = assure<Component>();
    +
    1075  ENTT_ASSERT(!cpool->super);
    +
    1076  cpool->sort(cpool->begin(), cpool->end(), std::move(compare), std::move(algo), std::forward<Args>(args)...);
    +
    1077  }
    +
    1078 
    +
    1114  template<typename To, typename From>
    +
    1115  void sort() {
    +
    1116  auto *cpool = assure<To>();
    +
    1117  ENTT_ASSERT(!cpool->super);
    +
    1118  cpool->respect(*assure<From>());
    +
    1119  }
    +
    1120 
    +
    1135  template<typename Component>
    +
    1136  void reset(const entity_type entity) {
    +
    1137  ENTT_ASSERT(valid(entity));
    +
    1138 
    +
    1139  if(auto *cpool = assure<Component>(); cpool->has(entity)) {
    +
    1140  cpool->remove(*this, entity);
    +
    1141  }
    +
    1142  }
    +
    1143 
    +
    1152  template<typename Component>
    +
    1153  void reset() {
    +
    1154  if(auto *cpool = assure<Component>(); cpool->on_destroy().empty()) {
    +
    1155  // no group set, otherwise the signal wouldn't be empty
    +
    1156  cpool->reset();
    +
    1157  } else {
    +
    1158  for(const auto entity: static_cast<const sparse_set<entity_type> &>(*cpool)) {
    +
    1159  cpool->remove(*this, entity);
    +
    1160  }
    +
    1161  }
    +
    1162  }
    +
    1163 
    +
    1172  void reset() {
    +
    1173  each([this](const auto entity) {
    +
    1174  // useless this-> used to suppress a warning with clang
    +
    1175  this->destroy(entity);
    +
    1176  });
    +
    1177  }
    +
    1178 
    +
    1196  template<typename Func>
    +
    1197  void each(Func func) const {
    +
    1198  static_assert(std::is_invocable_v<Func, entity_type>);
    +
    1199 
    +
    1200  if(destroyed == null) {
    +
    1201  for(auto pos = entities.size(); pos; --pos) {
    +
    1202  func(entities[pos-1]);
    +
    1203  }
    +
    1204  } else {
    +
    1205  for(auto pos = entities.size(); pos; --pos) {
    +
    1206  const auto curr = entity_type(pos - 1);
    +
    1207  const auto entity = entities[to_integer(curr)];
    +
    1208  const auto entt = entity_type{to_integer(entity) & traits_type::entity_mask};
    +
    1209 
    +
    1210  if(curr == entt) {
    +
    1211  func(entity);
    +
    1212  }
    +
    1213  }
    +
    1214  }
    +
    1215  }
    +
    1216 
    +
    1222  bool orphan(const entity_type entity) const {
    +
    1223  ENTT_ASSERT(valid(entity));
    +
    1224  bool orphan = true;
    +
    1225 
    +
    1226  for(std::size_t pos{}, last = pools.size(); pos < last && orphan; ++pos) {
    +
    1227  const auto &pdata = pools[pos];
    +
    1228  orphan = !(pdata.pool && pdata.pool->has(entity));
    +
    1229  }
    +
    1230 
    +
    1231  return orphan;
    +
    1232  }
    +
    1233 
    +
    1250  template<typename Func>
    +
    1251  void orphans(Func func) const {
    +
    1252  static_assert(std::is_invocable_v<Func, entity_type>);
    +
    1253 
    +
    1254  each([this, &func](const auto entity) {
    +
    1255  if(orphan(entity)) {
    +
    1256  func(entity);
    +
    1257  }
    +
    1258  });
    +
    1259  }
    +
    1260 
    +
    1293  template<typename... Component, typename... Exclude>
    +
    1294  entt::basic_view<Entity, exclude_t<Exclude...>, Component...> view(exclude_t<Exclude...> = {}) {
    +
    1295  static_assert(sizeof...(Component) > 0);
    +
    1296  return { assure<Component>()..., assure<Exclude>()... };
    +
    1297  }
    +
    1298 
    +
    1300  template<typename... Component, typename... Exclude>
    +
    1301  entt::basic_view<Entity, exclude_t<Exclude...>, Component...> view(exclude_t<Exclude...> = {}) const {
    +
    1302  static_assert(std::conjunction_v<std::is_const<Component>...>);
    +
    1303  return const_cast<basic_registry *>(this)->view<Component...>(exclude<Exclude...>);
    +
    1304  }
    +
    1305 
    +
    1312  template<typename... Component>
    +
    1313  bool sortable() const ENTT_NOEXCEPT {
    +
    1314  return !(assure<Component>()->super || ...);
    +
    1315  }
    +
    1316 
    +
    1344  template<typename... Owned, typename... Get, typename... Exclude>
    +
    1345  entt::basic_group<Entity, exclude_t<Exclude...>, get_t<Get...>, Owned...> group(get_t<Get...>, exclude_t<Exclude...> = {}) {
    +
    1346  static_assert(sizeof...(Owned) + sizeof...(Get) > 0);
    +
    1347  static_assert(sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude) > 1);
    +
    1348 
    +
    1349  using handler_type = group_handler<exclude_t<Exclude...>, get_t<Get...>, Owned...>;
    +
    1350 
    +
    1351  [[maybe_unused]] constexpr auto size = sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude);
    +
    1352  const auto cpools = std::make_tuple(assure<Owned>()..., assure<Get>()..., assure<Exclude>()...);
    +
    1353  const std::size_t extent[3]{sizeof...(Owned), sizeof...(Get), sizeof...(Exclude)};
    +
    1354  handler_type *handler = nullptr;
    +
    1355 
    +
    1356  if(auto it = std::find_if(groups.cbegin(), groups.cend(), [&extent](const auto &gdata) {
    +
    1357  return std::equal(std::begin(extent), std::end(extent), std::begin(gdata.extent))
    +
    1358  && (gdata.owned(type<Owned>()) && ...)
    +
    1359  && (gdata.get(type<Get>()) && ...)
    +
    1360  && (gdata.exclude(type<Exclude>()) && ...);
    +
    1361  }); it != groups.cend())
    +
    1362  {
    +
    1363  handler = static_cast<handler_type *>(it->group.get());
    +
    1364  }
    +
    1365 
    +
    1366  if(!handler) {
    +
    1367  const void *maybe_valid_if = nullptr;
    +
    1368  const void *discard_if = nullptr;
    +
    1369 
    +
    1370  group_data gdata{
    +
    1371  { sizeof...(Owned), sizeof...(Get), sizeof...(Exclude) },
    +
    1372  decltype(group_data::group){new handler_type{cpools}, [](void *gptr) { delete static_cast<handler_type *>(gptr); }},
    +
    1373  [](const component ctype) ENTT_NOEXCEPT { return ((ctype == type<Owned>()) || ...); },
    +
    1374  [](const component ctype) ENTT_NOEXCEPT { return ((ctype == type<Get>()) || ...); },
    +
    1375  [](const component ctype) ENTT_NOEXCEPT { return ((ctype == type<Exclude>()) || ...); }
    +
    1376  };
    +
    1377 
    +
    1378  if constexpr(sizeof...(Owned) == 0) {
    +
    1379  handler = static_cast<handler_type *>(groups.emplace_back(std::move(gdata)).group.get());
    +
    1380  } else {
    +
    1381  ENTT_ASSERT(std::all_of(groups.cbegin(), groups.cend(), [&extent](const auto &curr) {
    +
    1382  const std::size_t diff[3]{ (0u + ... + curr.owned(type<Owned>())), (0u + ... + curr.get(type<Get>())), (0u + ... + curr.exclude(type<Exclude>())) };
    +
    1383  return !diff[0] || ((std::equal(std::begin(diff), std::end(diff), extent) || std::equal(std::begin(diff), std::end(diff), curr.extent)));
    +
    1384  }));
    +
    1385 
    +
    1386  const auto next = std::find_if_not(groups.cbegin(), groups.cend(), [&size](const auto &curr) {
    +
    1387  const std::size_t diff = (0u + ... + curr.owned(type<Owned>()));
    +
    1388  return !diff || (size > (curr.extent[0] + curr.extent[1] + curr.extent[2]));
    +
    1389  });
    +
    1390 
    +
    1391  const auto prev = std::find_if(std::make_reverse_iterator(next), groups.crend(), [](const auto &curr) {
    +
    1392  return (0u + ... + curr.owned(type<Owned>()));
    +
    1393  });
    +
    1394 
    +
    1395  maybe_valid_if = (next == groups.cend() ? maybe_valid_if : next->group.get());
    +
    1396  discard_if = (prev == groups.crend() ? discard_if : prev->group.get());
    +
    1397  handler = static_cast<handler_type *>(groups.insert(next, std::move(gdata))->group.get());
    +
    1398  }
    +
    1399 
    +
    1400  ((std::get<pool_type<Owned> *>(cpools)->super = std::max(std::get<pool_type<Owned> *>(cpools)->super, size)), ...);
    +
    1401 
    +
    1402  (std::get<pool_type<Owned> *>(cpools)->on_construct().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if<Owned>>(*handler), ...);
    +
    1403  (std::get<pool_type<Get> *>(cpools)->on_construct().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if<Get>>(*handler), ...);
    +
    1404  (std::get<pool_type<Exclude> *>(cpools)->on_destroy().before(maybe_valid_if).template connect<&handler_type::template maybe_valid_if<Exclude>>(*handler), ...);
    +
    1405 
    +
    1406  (std::get<pool_type<Owned> *>(cpools)->on_destroy().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...);
    +
    1407  (std::get<pool_type<Get> *>(cpools)->on_destroy().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...);
    +
    1408  (std::get<pool_type<Exclude> *>(cpools)->on_construct().before(discard_if).template connect<&handler_type::discard_if>(*handler), ...);
    +
    1409 
    +
    1410  const auto *cpool = std::min({
    +
    1411  static_cast<sparse_set<Entity> *>(std::get<pool_type<Owned> *>(cpools))...,
    +
    1412  static_cast<sparse_set<Entity> *>(std::get<pool_type<Get> *>(cpools))...
    +
    1413  }, [](const auto *lhs, const auto *rhs) {
    +
    1414  return lhs->size() < rhs->size();
    +
    1415  });
    +
    1416 
    +
    1417  // we cannot iterate backwards because we want to leave behind valid entities in case of owned types
    +
    1418  std::for_each(cpool->data(), cpool->data() + cpool->size(), [cpools, handler](const auto entity) {
    +
    1419  if((std::get<pool_type<Owned> *>(cpools)->has(entity) && ...)
    +
    1420  && (std::get<pool_type<Get> *>(cpools)->has(entity) && ...)
    +
    1421  && !(std::get<pool_type<Exclude> *>(cpools)->has(entity) || ...))
    +
    1422  {
    +
    1423  if constexpr(sizeof...(Owned) == 0) {
    +
    1424  handler->set.construct(entity);
    +
    1425  } else {
    +
    1426  if(!(std::get<0>(cpools)->index(entity) < handler->owned)) {
    +
    1427  const auto pos = handler->owned++;
    +
    1428  (std::get<pool_type<Owned> *>(cpools)->swap(std::get<pool_type<Owned> *>(cpools)->data()[pos], entity), ...);
    +
    1429  }
    +
    1430  }
    +
    1431  }
    +
    1432  });
    +
    1433  }
    +
    1434 
    +
    1435  if constexpr(sizeof...(Owned) == 0) {
    +
    1436  return { &handler->set, std::get<pool_type<Get> *>(cpools)... };
    +
    1437  } else {
    +
    1438  return { &std::get<0>(cpools)->super, &handler->owned, std::get<pool_type<Owned> *>(cpools)... , std::get<pool_type<Get> *>(cpools)... };
    +
    1439  }
    +
    1440  }
    +
    1441 
    +
    1452  template<typename... Owned, typename... Get, typename... Exclude>
    +
    1453  entt::basic_group<Entity, exclude_t<Exclude...>, get_t<Get...>, Owned...> group(get_t<Get...>, exclude_t<Exclude...> = {}) const {
    +
    1454  static_assert(std::conjunction_v<std::is_const<Owned>..., std::is_const<Get>...>);
    +
    1455  return const_cast<basic_registry *>(this)->group<Owned...>(entt::get<Get...>, exclude<Exclude...>);
    +
    1456  }
    +
    1457 
    +
    1467  template<typename... Owned, typename... Exclude>
    +
    1468  entt::basic_group<Entity, exclude_t<Exclude...>, get_t<>, Owned...> group(exclude_t<Exclude...> = {}) {
    +
    1469  return group<Owned...>(entt::get<>, exclude<Exclude...>);
    +
    1470  }
    +
    1471 
    +
    1481  template<typename... Owned, typename... Exclude>
    +
    1482  entt::basic_group<Entity, exclude_t<Exclude...>, get_t<>, Owned...> group(exclude_t<Exclude...> = {}) const {
    +
    1483  static_assert(std::conjunction_v<std::is_const<Owned>...>);
    +
    1484  return const_cast<basic_registry *>(this)->group<Owned...>(exclude<Exclude...>);
    +
    1485  }
    +
    1486 
    +
    1507  template<typename It>
    + +
    1509  std::vector<const sparse_set<Entity> *> selected(std::distance(first, last));
    +
    1510 
    +
    1511  std::transform(first, last, selected.begin(), [this](const component ctype) {
    +
    1512  auto it = std::find_if(pools.begin(), pools.end(), [ctype = to_integer(ctype)](const auto &pdata) {
    +
    1513  return pdata.pool && pdata.runtime_type == ctype;
    +
    1514  });
    +
    1515 
    +
    1516  return it != pools.cend() && it->pool ? it->pool.get() : nullptr;
    +
    1517  });
    +
    1518 
    +
    1519  return { std::move(selected) };
    +
    1520  }
    +
    1521 
    +
    1555  template<typename... Component, typename... Exclude>
    + +
    1557  static_assert(std::conjunction_v<std::is_copy_constructible<Component>...>);
    +
    1558  basic_registry other;
    +
    1559 
    +
    1560  other.pools.resize(pools.size());
    +
    1561 
    +
    1562  for(auto pos = pools.size(); pos; --pos) {
    +
    1563  const auto &pdata = pools[pos-1];
    +
    1564  ENTT_ASSERT(!sizeof...(Component) || !pdata.pool || pdata.clone);
    +
    1565 
    +
    1566  if(pdata.pool && pdata.clone
    +
    1567  && (!sizeof...(Component) || ... || (pdata.runtime_type == to_integer(type<Component>())))
    +
    1568  && ((pdata.runtime_type != to_integer(type<Exclude>())) && ...))
    +
    1569  {
    +
    1570  auto &curr = other.pools[pos-1];
    +
    1571  curr.remove = pdata.remove;
    +
    1572  curr.clone = pdata.clone;
    +
    1573  curr.stomp = pdata.stomp;
    +
    1574  curr.pool = pdata.clone ? pdata.clone(*pdata.pool) : nullptr;
    +
    1575  curr.runtime_type = pdata.runtime_type;
    +
    1576  }
    +
    1577  }
    +
    1578 
    +
    1579  other.skip_family_pools = skip_family_pools;
    +
    1580  other.destroyed = destroyed;
    +
    1581  other.entities = entities;
    +
    1582 
    +
    1583  other.pools.erase(std::remove_if(other.pools.begin()+skip_family_pools, other.pools.end(), [](const auto &pdata) {
    +
    1584  return !pdata.pool;
    +
    1585  }), other.pools.end());
    +
    1586 
    +
    1587  return other;
    +
    1588  }
    +
    1589 
    +
    1620  template<typename... Component, typename... Exclude>
    +
    1621  void stomp(const entity_type dst, const entity_type src, const basic_registry &other, exclude_t<Exclude...> = {}) {
    +
    1622  const entity_type entt[1]{dst};
    +
    1623  stomp<Component...>(std::begin(entt), std::end(entt), src, other, exclude<Exclude...>);
    +
    1624  }
    +
    1625 
    +
    1639  template<typename... Component, typename It, typename... Exclude>
    +
    1640  void stomp(It first, It last, const entity_type src, const basic_registry &other, exclude_t<Exclude...> = {}) {
    +
    1641  static_assert(sizeof...(Component) == 0 || sizeof...(Exclude) == 0);
    +
    1642 
    +
    1643  for(auto pos = other.pools.size(); pos; --pos) {
    +
    1644  const auto &pdata = other.pools[pos-1];
    +
    1645  ENTT_ASSERT(!sizeof...(Component) || !pdata.pool || pdata.stomp);
    +
    1646 
    +
    1647  if(pdata.pool && pdata.stomp
    +
    1648  && (!sizeof...(Component) || ... || (pdata.runtime_type == to_integer(type<Component>())))
    +
    1649  && ((pdata.runtime_type != to_integer(type<Exclude>())) && ...)
    +
    1650  && pdata.pool->has(src))
    +
    1651  {
    +
    1652  std::for_each(first, last, [this, &pdata, src](const auto entity) {
    +
    1653  pdata.stomp(*pdata.pool, src, *this, entity);
    +
    1654  });
    +
    1655  }
    +
    1656  }
    +
    1657  }
    +
    1658 
    +
    1669  entt::basic_snapshot<Entity> snapshot() const ENTT_NOEXCEPT {
    +
    1670  using follow_fn_type = entity_type(const basic_registry &, const entity_type);
    +
    1671 
    +
    1672  const auto head = to_integer(destroyed);
    +
    1673  const entity_type seed = (destroyed == null) ? destroyed : entity_type{head | (to_integer(entities[head]) & (traits_type::version_mask << traits_type::entity_shift))};
    +
    1674 
    +
    1675  follow_fn_type *follow = [](const basic_registry &reg, const entity_type entity) -> entity_type {
    +
    1676  const auto &others = reg.entities;
    +
    1677  const auto entt = to_integer(entity) & traits_type::entity_mask;
    +
    1678  const auto curr = to_integer(others[entt]) & traits_type::entity_mask;
    +
    1679  return entity_type{curr | (to_integer(others[curr]) & (traits_type::version_mask << traits_type::entity_shift))};
    +
    1680  };
    +
    1681 
    +
    1682  return { this, seed, follow };
    +
    1683  }
    +
    1684 
    + +
    1701  using force_fn_type = void(basic_registry &, const entity_type, const bool);
    +
    1702 
    +
    1703  force_fn_type *force = [](basic_registry &reg, const entity_type entity, const bool discard) {
    +
    1704  const auto entt = to_integer(entity) & traits_type::entity_mask;
    +
    1705  auto &others = reg.entities;
    +
    1706 
    +
    1707  if(!(entt < others.size())) {
    +
    1708  auto curr = others.size();
    +
    1709  others.resize(entt + 1);
    +
    1710 
    +
    1711  std::generate(others.data() + curr, others.data() + entt, [curr]() mutable {
    +
    1712  return entity_type(curr++);
    +
    1713  });
    +
    1714  }
    +
    1715 
    +
    1716  others[entt] = entity;
    +
    1717 
    +
    1718  if(discard) {
    +
    1719  reg.destroy(entity);
    +
    1720  const auto version = to_integer(entity) & (traits_type::version_mask << traits_type::entity_shift);
    +
    1721  others[entt] = entity_type{(to_integer(others[entt]) & traits_type::entity_mask) | version};
    +
    1722  }
    +
    1723  };
    +
    1724 
    +
    1725  reset();
    +
    1726  entities.clear();
    +
    1727  destroyed = null;
    +
    1728 
    +
    1729  return { this, force };
    +
    1730  }
    +
    1731 
    +
    1743  template<typename Type, typename... Args>
    +
    1744  Type & set(Args &&... args) {
    +
    1745  const auto ctype = runtime_type<Type, context_family>();
    +
    1746  auto it = std::find_if(vars.begin(), vars.end(), [ctype](const auto &candidate) {
    +
    1747  return candidate.runtime_type == ctype;
    +
    1748  });
    +
    1749 
    +
    1750  if(it == vars.cend()) {
    +
    1751  vars.push_back({
    +
    1752  decltype(ctx_variable::value){new Type{std::forward<Args>(args)...}, [](void *ptr) { delete static_cast<Type *>(ptr); }},
    +
    1753  ctype
    +
    1754  });
    +
    1755 
    +
    1756  it = std::prev(vars.end());
    +
    1757  } else {
    +
    1758  it->value.reset(new Type{std::forward<Args>(args)...});
    +
    1759  }
    +
    1760 
    +
    1761  return *static_cast<Type *>(it->value.get());
    +
    1762  }
    +
    1763 
    +
    1768  template<typename Type>
    +
    1769  void unset() {
    +
    1770  vars.erase(std::remove_if(vars.begin(), vars.end(), [](auto &var) {
    +
    1771  return var.runtime_type == runtime_type<Type, context_family>();
    +
    1772  }), vars.end());
    +
    1773  }
    +
    1774 
    +
    1786  template<typename Type, typename... Args>
    +
    1787  Type & ctx_or_set(Args &&... args) {
    +
    1788  auto *value = try_ctx<Type>();
    +
    1789  return value ? *value : set<Type>(std::forward<Args>(args)...);
    +
    1790  }
    +
    1791 
    +
    1798  template<typename Type>
    +
    1799  const Type * try_ctx() const ENTT_NOEXCEPT {
    +
    1800  const auto it = std::find_if(vars.begin(), vars.end(), [](const auto &var) {
    +
    1801  return var.runtime_type == runtime_type<Type, context_family>();
    +
    1802  });
    +
    1803 
    +
    1804  return (it == vars.cend()) ? nullptr : static_cast<const Type *>(it->value.get());
    +
    1805  }
    +
    1806 
    +
    1808  template<typename Type>
    +
    1809  Type * try_ctx() ENTT_NOEXCEPT {
    +
    1810  return const_cast<Type *>(std::as_const(*this).template try_ctx<Type>());
    +
    1811  }
    +
    1812 
    +
    1825  template<typename Type>
    +
    1826  const Type & ctx() const ENTT_NOEXCEPT {
    +
    1827  const auto *instance = try_ctx<Type>();
    +
    1828  ENTT_ASSERT(instance);
    +
    1829  return *instance;
    +
    1830  }
    +
    1831 
    +
    1833  template<typename Type>
    +
    1834  Type & ctx() ENTT_NOEXCEPT {
    +
    1835  return const_cast<Type &>(std::as_const(*this).template ctx<Type>());
    +
    1836  }
    +
    1837 
    +
    1838 private:
    +
    1839  mutable std::size_t skip_family_pools{};
    +
    1840  mutable std::vector<pool_data> pools{};
    +
    1841  std::vector<group_data> groups{};
    +
    1842  std::vector<ctx_variable> vars{};
    +
    1843  std::vector<entity_type> entities{};
    +
    1844  entity_type destroyed{null};
    +
    1845 };
    +
    1846 
    +
    1847 
    +
    1848 }
    +
    1849 
    +
    1850 
    +
    1851 #endif // ENTT_ENTITY_REGISTRY_HPP
    +
    auto create()
    Creates a new entity and returns it.
    Definition: registry.hpp:565
    +
    Type & ctx_or_set(Args &&... args)
    Binds an object to the context of the registry.
    Definition: registry.hpp:1787
    +
    Type & set(Args &&... args)
    Binds an object to the context of the registry.
    Definition: registry.hpp:1744
    +
    auto on_replace() ENTT_NOEXCEPT
    Returns a sink object for the given component.
    Definition: registry.hpp:989
    +
    void sort()
    Sorts two pools of components in the same way.
    Definition: registry.hpp:1115
    +
    constexpr exclude_t< Type... > exclude
    Variable template for exclusion lists.
    Definition: utility.hpp:24
    +
    Utility class to create snapshots from a registry.
    Definition: fwd.hpp:37
    +
    void shrink_to_fit()
    Requests the removal of unused capacity for the given components.
    Definition: registry.hpp:425
    +
    void prepare()
    Prepares pools for the given types if required.
    Definition: registry.hpp:341
    +
    +
    constexpr get_t< Type... > get
    Variable template for lists of observed components.
    Definition: utility.hpp:40
    +
    entt::basic_view< Entity, exclude_t< Exclude... >, Component... > view(exclude_t< Exclude... >={}) const
    Returns a view for the given components.
    Definition: registry.hpp:1301
    +
    bool valid(const entity_type entity) const ENTT_NOEXCEPT
    Checks if an entity identifier refers to a valid entity.
    Definition: registry.hpp:500
    +
    void create(It first, It last, entity_type src, const basic_registry &other, exclude_t< Exclude... >={})
    Assigns each element in a range an entity from a prototype entity.
    Definition: registry.hpp:649
    +
    void destroy(const entity_type entt)
    Removes an entity from a storage and destroys its object.
    Definition: storage.hpp:379
    +
    iterator_type batch(It first, It last, Args &&... args)
    Assigns one or more entities to a storage and default constructs or copy constructs their objects.
    Definition: storage.hpp:356
    +
    static component type() ENTT_NOEXCEPT
    Returns the opaque identifier of a component.
    Definition: registry.hpp:332
    +
    Runtime view.
    Definition: fwd.hpp:21
    +
    Alias for exclusion lists.
    Definition: utility.hpp:16
    +
    entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... > group(get_t< Get... >, exclude_t< Exclude... >={}) const
    Returns a group for the given components.
    Definition: registry.hpp:1453
    +
    auto try_get([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT
    Returns pointers to the given components for an entity.
    Definition: registry.hpp:855
    +
    decltype(auto) assign(const entity_type entity, [[maybe_unused]] Args &&... args)
    Assigns the given component to an entity.
    Definition: registry.hpp:732
    +
    void destroy(const entity_type entity)
    Destroys an entity and lets the registry recycle the identifier.
    Definition: registry.hpp:682
    +
    decltype(auto) assign_or_replace(const entity_type entity, Args &&... args)
    Assigns or replaces the given component for an entity.
    Definition: registry.hpp:924
    +
    Group.
    Definition: fwd.hpp:25
    +
    entt::basic_group< Entity, exclude_t< Exclude... >, get_t<>, Owned... > group(exclude_t< Exclude... >={}) const
    Returns a group for the given components.
    Definition: registry.hpp:1482
    +
    static entity_type entity(const entity_type entity) ENTT_NOEXCEPT
    Returns the entity identifier without the version.
    Definition: registry.hpp:510
    +
    decltype(auto) get_or_assign(const entity_type entity, Args &&... args) ENTT_NOEXCEPT
    Returns a reference to the given component for an entity.
    Definition: registry.hpp:836
    +
    basic_registry() ENTT_NOEXCEPT=default
    Default constructor.
    +
    void each(Func func) const
    Iterates all the entities that are still in use.
    Definition: registry.hpp:1197
    +
    bool orphan(const entity_type entity) const
    Checks if an entity has components assigned.
    Definition: registry.hpp:1222
    +
    void orphans(Func func) const
    Iterates orphans and applies them the given function object.
    Definition: registry.hpp:1251
    +
    size_type capacity() const ENTT_NOEXCEPT
    Returns the number of entities that a registry has currently allocated space for.
    Definition: registry.hpp:415
    +
    size_type size() const ENTT_NOEXCEPT
    Returns the number of existing components of the given type.
    Definition: registry.hpp:351
    +
    basic_snapshot_loader< Entity > loader() ENTT_NOEXCEPT
    Returns a temporary object to use to load snapshots.
    Definition: registry.hpp:1700
    +
    const Component * raw() const ENTT_NOEXCEPT
    Direct access to the list of components of a given pool.
    Definition: registry.hpp:467
    +
    entity_type create(entity_type src, const basic_registry &other, exclude_t< Exclude... >={})
    Creates a new entity from a prototype entity.
    Definition: registry.hpp:620
    +
    auto create(It first, It last)
    Assigns each element in a range an entity.
    Definition: registry.hpp:591
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    Type & ctx() ENTT_NOEXCEPT
    Returns a reference to an object in the context of the registry.
    Definition: registry.hpp:1834
    +
    version_type current(const entity_type entity) const ENTT_NOEXCEPT
    Returns the actual version for an entity identifier.
    Definition: registry.hpp:536
    +
    sink(sigh< Ret(Args...)> &) ENTT_NOEXCEPT -> sink< Ret(Args...)>
    Deduction guide.
    +
    size_type alive() const ENTT_NOEXCEPT
    Returns the number of entities still in use.
    Definition: registry.hpp:367
    +
    Alias for lists of observed components.
    Definition: utility.hpp:32
    +
    bool has(const entity_type entity) const ENTT_NOEXCEPT
    Checks if an entity has all the given components.
    Definition: registry.hpp:769
    +
    void stomp(const entity_type dst, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})
    Stomps an entity and its components.
    Definition: registry.hpp:1621
    +
    decltype(auto) replace(const entity_type entity, Args &&... args)
    Replaces the given component for an entity.
    Definition: registry.hpp:896
    +
    size_type size() const ENTT_NOEXCEPT
    Returns the number of entities created so far.
    Definition: registry.hpp:359
    +
    void reserve(const size_type cap)
    Increases the capacity of the registry or of the pools for the given components.
    Definition: registry.hpp:392
    +
    void reset()
    Resets the pool of the given component.
    Definition: registry.hpp:1153
    +
    bool empty() const ENTT_NOEXCEPT
    Checks whether the registry or the pools of the given components are empty.
    Definition: registry.hpp:441
    +
    const entity_type * data() const ENTT_NOEXCEPT
    Direct access to the list of entities of a given pool.
    Definition: registry.hpp:491
    +
    bool has(const entity_type entt) const ENTT_NOEXCEPT
    Checks if a sparse set contains an entity.
    Definition: sparse_set.hpp:364
    +
    entt::basic_group< Entity, exclude_t< Exclude... >, get_t<>, Owned... > group(exclude_t< Exclude... >={})
    Returns a group for the given components.
    Definition: registry.hpp:1468
    +
    const Type * try_ctx() const ENTT_NOEXCEPT
    Returns a pointer to an object in the context of the registry.
    Definition: registry.hpp:1799
    +
    auto on_construct() ENTT_NOEXCEPT
    Returns a sink object for the given component.
    Definition: registry.hpp:958
    +
    Fast and reliable entity-component system.
    Definition: fwd.hpp:13
    +
    entt::basic_runtime_view< Entity > runtime_view(It first, It last) const
    Returns a runtime view for the given components.
    Definition: registry.hpp:1508
    +
    decltype(auto) get([[maybe_unused]] const entity_type entity) const
    Returns references to the given components for an entity.
    Definition: registry.hpp:789
    +
    auto on_destroy() ENTT_NOEXCEPT
    Returns a sink object for the given component.
    Definition: registry.hpp:1021
    +
    void reset(const entity_type entity)
    Resets the given component for an entity.
    Definition: registry.hpp:1136
    +
    void reset()
    Resets a whole registry.
    Definition: registry.hpp:1172
    +
    static version_type version(const entity_type entity) ENTT_NOEXCEPT
    Returns the version stored along with an entity identifier.
    Definition: registry.hpp:519
    +
    void destroy(It first, It last)
    Destroys all the entities in a range.
    Definition: registry.hpp:706
    +
    entt::basic_view< Entity, exclude_t< Exclude... >, Component... > view(exclude_t< Exclude... >={})
    Returns a view for the given components.
    Definition: registry.hpp:1294
    +
    entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... > group(get_t< Get... >, exclude_t< Exclude... >={})
    Returns a group for the given components.
    Definition: registry.hpp:1345
    +
    View.
    Definition: fwd.hpp:17
    +
    auto try_get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT
    Returns pointers to the given components for an entity.
    Definition: registry.hpp:867
    +
    entt::basic_snapshot< Entity > snapshot() const ENTT_NOEXCEPT
    Returns a temporary object to use to create snapshots.
    Definition: registry.hpp:1669
    +
    const Type & ctx() const ENTT_NOEXCEPT
    Returns a reference to an object in the context of the registry.
    Definition: registry.hpp:1826
    +
    std::size_t size_type
    Unsigned integer type.
    Definition: registry.hpp:311
    +
    void sort(Compare compare, Sort algo=Sort{}, Args &&... args)
    Sorts the pool of entities for the given component.
    Definition: registry.hpp:1073
    +
    const object_type & get(const entity_type entt) const ENTT_NOEXCEPT
    Returns the object associated with an entity.
    Definition: storage.hpp:280
    +
    Component * raw() ENTT_NOEXCEPT
    Direct access to the list of components of a given pool.
    Definition: registry.hpp:473
    +
    Type * try_ctx() ENTT_NOEXCEPT
    Returns a pointer to an object in the context of the registry.
    Definition: registry.hpp:1809
    +
    object_type & construct(const entity_type entt, Args &&... args)
    Assigns an entity to a storage and constructs its object.
    Definition: storage.hpp:322
    +
    size_type capacity() const ENTT_NOEXCEPT
    Returns the capacity of the pool for the given component.
    Definition: registry.hpp:406
    +
    void stomp(It first, It last, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})
    Stomps the entities in a range and their components.
    Definition: registry.hpp:1640
    +
    void unset()
    Unsets a context variable if it exists.
    Definition: registry.hpp:1769
    +
    bool sortable() const ENTT_NOEXCEPT
    Checks whether the given components belong to any group.
    Definition: registry.hpp:1313
    +
    basic_registry clone(exclude_t< Exclude... >={}) const
    Returns a full or partial copy of a registry.
    Definition: registry.hpp:1556
    +
    Entity entity_type
    Underlying entity identifier.
    Definition: registry.hpp:307
    +
    Function object to wrap std::sort in a class type.
    Definition: algorithm.hpp:23
    +
    void remove(const entity_type entity)
    Removes the given component from an entity.
    Definition: registry.hpp:751
    +
    Utility class to restore a snapshot as a whole.
    Definition: fwd.hpp:41
    +
    typename traits_type::version_type version_type
    Underlying version type.
    Definition: registry.hpp:309
    diff --git a/resource_2fwd_8hpp_source.html b/resource_2fwd_8hpp_source.html index c8b48209c..12c438014 100644 --- a/resource_2fwd_8hpp_source.html +++ b/resource_2fwd_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/resource/fwd.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    fwd.hpp
    -
    1 #ifndef ENTT_RESOURCE_FWD_HPP
    2 #define ENTT_RESOURCE_FWD_HPP
    3 
    4 
    5 namespace entt {
    6 
    7 
    9 template<typename>
    10 struct cache;
    11 
    13 template<typename>
    14 class handle;
    15 
    17 template<typename, typename>
    18 class loader;
    19 
    20 
    21 }
    22 
    23 
    24 #endif // ENTT_RESOURCE_FWD_HPP
    Shared resource handle.
    Definition: fwd.hpp:14
    -
    Base class for resource loaders.
    Definition: fwd.hpp:18
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    1 #ifndef ENTT_RESOURCE_FWD_HPP
    +
    2 #define ENTT_RESOURCE_FWD_HPP
    +
    3 
    +
    4 
    +
    5 namespace entt {
    +
    6 
    +
    7 
    +
    9 template<typename>
    +
    10 struct cache;
    +
    11 
    +
    13 template<typename>
    +
    14 class handle;
    +
    15 
    +
    17 template<typename, typename>
    +
    18 class loader;
    +
    19 
    +
    20 
    +
    21 }
    +
    22 
    +
    23 
    +
    24 #endif // ENTT_RESOURCE_FWD_HPP
    +
    Shared resource handle.
    Definition: fwd.hpp:14
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    Base class for resource loaders.
    Definition: fwd.hpp:18
    diff --git a/resource_8md_source.html b/resource_8md_source.html deleted file mode 100644 index f9ac52388..000000000 --- a/resource_8md_source.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - -EnTT: docs/md/resource.md Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    EnTT -  3.2.1 -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    docs/md/resource.md
    -
    -
    -
    1 # Crash Course: resource management
    2 
    3 <!--
    4 @cond TURN_OFF_DOXYGEN
    5 -->
    6 # Table of Contents
    7 
    8 * [Introduction](#introduction)
    9 * [The resource, the loader and the cache](#the-resource-the-loader-and-the-cache)
    10 <!--
    11 @endcond TURN_OFF_DOXYGEN
    12 -->
    13 
    14 # Introduction
    15 
    16 Resource management is usually one of the most critical part of a software like
    17 a game. Solutions are often tuned to the particular application. There exist
    18 several approaches and all of them are perfectly fine as long as they fit the
    19 requirements of the piece of software in which they are used.<br/>
    20 Examples are loading everything on start, loading on request, predictive
    21 loading, and so on.
    22 
    23 `EnTT` doesn't pretend to offer a _one-fits-all_ solution for the different
    24 cases. Instead, it offers a minimal and perhaps trivial cache that can be useful
    25 most of the time during prototyping and sometimes even in a production
    26 environment.<br/>
    27 For those interested in the subject, the plan is to improve it considerably over
    28 time in terms of performance, memory usage and functionalities. Hoping to make
    29 it, of course, one step at a time.
    30 
    31 # The resource, the loader and the cache
    32 
    33 There are three main actors in the model: the resource, the loader and the
    34 cache.
    35 
    36 The _resource_ is whatever users want it to be. An image, a video, an audio,
    37 whatever. There are no limits.<br/>
    38 As a minimal example:
    39 
    40 ```cpp
    41 struct my_resource { const int value; };
    42 ```
    43 
    44 A _loader_ is a class the aim of which is to load a specific resource. It has to
    45 inherit directly from the dedicated base class as in the following example:
    46 
    47 ```cpp
    48 struct my_loader final: entt::loader<my_loader, my_resource> {
    49  // ...
    50 };
    51 ```
    52 
    53 Where `my_resource` is the type of resources it creates.<br/>
    54 A resource loader must also expose a public const member function named `load`
    55 that accepts a variable number of arguments and returns a shared pointer to a
    56 resource.<br/>
    57 As an example:
    58 
    59 ```cpp
    60 struct my_loader: entt::loader<my_loader, my_resource> {
    61  std::shared_ptr<my_resource> load(int value) const {
    62  // ...
    63  return std::shared_ptr<my_resource>(new my_resource{ value });
    64  }
    65 };
    66 ```
    67 
    68 In general, resource loaders should not have a state or retain data of any type.
    69 They should let the cache manage their resources instead.<br/>
    70 As a side note, base class and CRTP idiom aren't strictly required with the
    71 current implementation. One could argue that a cache can easily work with
    72 loaders of any type. However, future changes won't be breaking ones by forcing
    73 the use of a base class today and that's why the model is already in its place.
    74 
    75 Finally, a cache is a specialization of a class template tailored to a specific
    76 resource:
    77 
    78 ```cpp
    79 using my_cache = entt::cache<my_resource>;
    80 
    81 // ...
    82 
    83 my_cache cache{};
    84 ```
    85 
    86 The idea is to create different caches for different types of resources and to
    87 manage each one independently in the most appropriate way.<br/>
    88 As a (very) trivial example, audio tracks can survive in most of the scenes of
    89 an application while meshes can be associated with a single scene and then
    90 discarded when users leave it.
    91 
    92 A cache offers a set of basic functionalities to query its internal state and to
    93 _organize_ it:
    94 
    95 ```cpp
    96 // gets the number of resources managed by a cache
    97 const auto size = cache.size();
    98 
    99 // checks if a cache contains at least a valid resource
    100 const auto empty = cache.empty();
    101 
    102 // clears a cache and discards its content
    103 cache.clear();
    104 ```
    105 
    106 Besides these member functions, a cache contains what is needed to load, use and
    107 discard resources of the given type.<br/>
    108 Before to explore this part of the interface, it makes sense to mention how
    109 resources are identified. The type of the identifiers to use is defined as:
    110 
    111 ```cpp
    112 entt::cache<resource>::id_type
    113 ```
    114 
    115 Where `id_type` is an alias for `entt::hashed_string::hash_type`. Therefore,
    116 resource identifiers are created explicitly as in the following example:
    117 
    118 ```cpp
    119 constexpr auto identifier = entt::cache<resource>::id_type{"my/resource/identifier"_hs};
    120 // this is equivalent to the following
    121 constexpr auto hs = entt::hashed_string{"my/resource/identifier"};
    122 ```
    123 
    124 The class `hashed_string` is described in a dedicated section, so I won't go in
    125 details here.
    126 
    127 Resources are loaded and thus stored in a cache through the `load` member
    128 function. It accepts the loader to use as a template parameter, the resource
    129 identifier and the parameters used to construct the resource as arguments:
    130 
    131 ```cpp
    132 // uses the identifier declared above
    133 cache.load<my_loader>(identifier, 0);
    134 
    135 // uses a const char * directly as an identifier
    136 cache.load<my_loader>("another/identifier"_hs, 42);
    137 ```
    138 
    139 The function returns a handle to the resource, whether it already exists or is
    140 loaded. In case the loader returns an invalid pointer, the handle is invalid as
    141 well and therefore it can be easily used with an `if` statement:
    142 
    143 ```cpp
    144 if(auto handle = cache.load<my_loader>("another/identifier"_hs, 42); handle) {
    145  // ...
    146 }
    147 ```
    148 
    149 Before trying to load a resource, the `contains` member function can be used to
    150 know if a cache already contains a specific resource:
    151 
    152 ```cpp
    153 auto exists = cache.contains("my/identifier"_hs);
    154 ```
    155 
    156 There exists also a member function to use to force a reload of an already
    157 existing resource if needed:
    158 
    159 ```cpp
    160 auto handle = cache.reload<my_loader>("another/identifier"_hs, 42);
    161 ```
    162 
    163 As above, the function returns a handle to the resource that is invalid in case
    164 of errors. The `reload` member function is a kind of alias of the following
    165 snippet:
    166 
    167 ```cpp
    168 cache.discard(identifier);
    169 cache.load<my_loader>(identifier, 42);
    170 ```
    171 
    172 Where the `discard` member function is used to get rid of a resource if loaded.
    173 In case the cache doesn't contain a resource for the given identifier, `discard`
    174 does nothing and returns immediately.
    175 
    176 So far, so good. Resources are finally loaded and stored within the cache.<br/>
    177 They are returned to users in the form of handles. To get one of them later on:
    178 
    179 ```cpp
    180 auto handle = cache.handle("my/identifier"_hs);
    181 ```
    182 
    183 The idea behind a handle is the same of the flyweight pattern. In other terms,
    184 resources aren't copied around. Instead, instances are shared between handles.
    185 Users of a resource own a handle that guarantees that a resource isn't destroyed
    186 until all the handles are destroyed, even if the resource itself is removed from
    187 the cache.<br/>
    188 Handles are tiny objects both movable and copyable. They return the contained
    189 resource as a const reference on request:
    190 
    191 * By means of the `get` member function:
    192 
    193  ```cpp
    194  const auto &resource = handle.get();
    195  ```
    196 
    197 * Using the proper cast operator:
    198 
    199  ```cpp
    200  const auto &resource = handle;
    201  ```
    202 
    203 * Through the dereference operator:
    204 
    205  ```cpp
    206  const auto &resource = *handle;
    207  ```
    208 
    209 The resource can also be accessed directly using the arrow operator if required:
    210 
    211 ```cpp
    212 auto value = handle->value;
    213 ```
    214 
    215 To test if a handle is still valid, the cast operator to `bool` allows users to
    216 use it in a guard:
    217 
    218 ```cpp
    219 if(handle) {
    220  // ...
    221 }
    222 ```
    223 
    224 Finally, in case there is the need to load a resource and thus to get a handle
    225 without storing the resource itself in the cache, users can rely on the `temp`
    226 member function template.<br/>
    227 The declaration is similar to that of `load`, a (possibly invalid) handle for
    228 the resource is returned also in this case:
    229 
    230 ```cpp
    231 if(auto handle = cache.temp<my_loader>(42); handle) {
    232  // ...
    233 }
    234 ```
    235 
    236 Do not forget to test the handle for validity. Otherwise, getting a reference to
    237 the resource it points may result in undefined behavior.
    - - - - diff --git a/runtime__view_8hpp_source.html b/runtime__view_8hpp_source.html index 85f8e9a4c..d5cd22e28 100644 --- a/runtime__view_8hpp_source.html +++ b/runtime__view_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/entity/runtime_view.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    runtime_view.hpp
    -
    1 #ifndef ENTT_ENTITY_RUNTIME_VIEW_HPP
    2 #define ENTT_ENTITY_RUNTIME_VIEW_HPP
    3 
    4 
    5 #include <iterator>
    6 #include <cassert>
    7 #include <vector>
    8 #include <utility>
    9 #include <algorithm>
    10 #include <type_traits>
    11 #include "../config/config.h"
    12 #include "sparse_set.hpp"
    13 #include "entity.hpp"
    14 #include "fwd.hpp"
    15 
    16 
    17 namespace entt {
    18 
    19 
    58 template<typename Entity>
    59 class basic_runtime_view {
    61  friend class basic_registry<Entity>;
    62 
    63  using underlying_iterator_type = typename sparse_set<Entity>::iterator_type;
    64 
    65  class iterator {
    66  friend class basic_runtime_view<Entity>;
    67 
    68  iterator(underlying_iterator_type first, underlying_iterator_type last, const sparse_set<Entity> * const *others, const sparse_set<Entity> * const *length) ENTT_NOEXCEPT
    69  : begin{first},
    70  end{last},
    71  from{others},
    72  to{length}
    73  {
    74  if(begin != end && !valid()) {
    75  ++(*this);
    76  }
    77  }
    78 
    79  bool valid() const ENTT_NOEXCEPT {
    80  return std::all_of(from, to, [entt = *begin](const auto *view) {
    81  return view->has(entt);
    82  });
    83  }
    84 
    85  public:
    86  using difference_type = typename underlying_iterator_type::difference_type;
    87  using value_type = typename underlying_iterator_type::value_type;
    88  using pointer = typename underlying_iterator_type::pointer;
    89  using reference = typename underlying_iterator_type::reference;
    90  using iterator_category = std::forward_iterator_tag;
    91 
    92  iterator() ENTT_NOEXCEPT = default;
    93 
    94  iterator & operator++() ENTT_NOEXCEPT {
    95  return (++begin != end && !valid()) ? ++(*this) : *this;
    96  }
    97 
    98  iterator operator++(int) ENTT_NOEXCEPT {
    99  iterator orig = *this;
    100  return ++(*this), orig;
    101  }
    102 
    103  bool operator==(const iterator &other) const ENTT_NOEXCEPT {
    104  return other.begin == begin;
    105  }
    106 
    107  bool operator!=(const iterator &other) const ENTT_NOEXCEPT {
    108  return !(*this == other);
    109  }
    110 
    111  pointer operator->() const ENTT_NOEXCEPT {
    112  return begin.operator->();
    113  }
    114 
    115  reference operator*() const ENTT_NOEXCEPT {
    116  return *operator->();
    117  }
    118 
    119  private:
    120  underlying_iterator_type begin;
    121  underlying_iterator_type end;
    122  const sparse_set<Entity> * const *from;
    123  const sparse_set<Entity> * const *to;
    124  };
    125 
    126  basic_runtime_view(std::vector<const sparse_set<Entity> *> others) ENTT_NOEXCEPT
    127  : pools{std::move(others)}
    128  {
    129  const auto it = std::min_element(pools.begin(), pools.end(), [](const auto *lhs, const auto *rhs) {
    130  return (!lhs && rhs) || (lhs && rhs && lhs->size() < rhs->size());
    131  });
    132 
    133  // brings the best candidate (if any) on front of the vector
    134  std::rotate(pools.begin(), it, pools.end());
    135  }
    136 
    137  bool valid() const ENTT_NOEXCEPT {
    138  return !pools.empty() && pools.front();
    139  }
    140 
    141 public:
    143  using entity_type = Entity;
    145  using size_type = std::size_t;
    147  using iterator_type = iterator;
    148 
    153  size_type size() const ENTT_NOEXCEPT {
    154  return valid() ? pools.front()->size() : size_type{};
    155  }
    156 
    161  bool empty() const ENTT_NOEXCEPT {
    162  return !valid() || pools.front()->empty();
    163  }
    164 
    179  iterator_type begin() const ENTT_NOEXCEPT {
    180  iterator_type it{};
    181 
    182  if(valid()) {
    183  const auto &pool = *pools.front();
    184  const auto * const *data = pools.data();
    185  it = { pool.begin(), pool.end(), data + 1, data + pools.size() };
    186  }
    187 
    188  return it;
    189  }
    190 
    206  iterator_type end() const ENTT_NOEXCEPT {
    207  iterator_type it{};
    208 
    209  if(valid()) {
    210  const auto &pool = *pools.front();
    211  it = { pool.end(), pool.end(), nullptr, nullptr };
    212  }
    213 
    214  return it;
    215  }
    216 
    222  bool contains(const entity_type entt) const ENTT_NOEXCEPT {
    223  return valid() && std::all_of(pools.cbegin(), pools.cend(), [entt](const auto *view) {
    224  return view->find(entt) != view->end();
    225  });
    226  }
    227 
    243  template<typename Func>
    244  void each(Func func) const {
    245  std::for_each(begin(), end(), func);
    246  }
    247 
    248 private:
    249  std::vector<const sparse_set<Entity> *> pools;
    250 };
    251 
    252 
    253 }
    254 
    255 
    256 #endif // ENTT_ENTITY_RUNTIME_VIEW_HPP
    bool contains(const entity_type entt) const ENTT_NOEXCEPT
    Checks if a view contains an entity.
    -
    std::size_t size_type
    Unsigned integer type.
    -
    Basic sparse set implementation.
    Definition: sparse_set.hpp:50
    -
    iterator iterator_type
    Input iterator type.
    -
    constexpr bool operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT
    Compares two hashed strings.
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    Fast and reliable entity-component system.
    Definition: fwd.hpp:13
    -
    View.
    Definition: fwd.hpp:17
    -
    bool empty() const ENTT_NOEXCEPT
    Checks if the view is definitely empty.
    -
    iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the first entity that has the given components.
    -
    void each(Func func) const
    Iterates entities and applies the given function object to them.
    -
    basic_view< entity, Types... > view
    Alias declaration for the most common use case.
    Definition: fwd.hpp:76
    -
    size_type size() const ENTT_NOEXCEPT
    Estimates the number of entities that have the given components.
    -
    Entity entity_type
    Underlying entity identifier.
    -
    iterator_type end() const ENTT_NOEXCEPT
    Returns an iterator that is past the last entity that has the given components.
    -
    Runtime view.
    Definition: fwd.hpp:21
    -
    iterator iterator_type
    Random access iterator type.
    Definition: sparse_set.hpp:182
    +
    1 #ifndef ENTT_ENTITY_RUNTIME_VIEW_HPP
    +
    2 #define ENTT_ENTITY_RUNTIME_VIEW_HPP
    +
    3 
    +
    4 
    +
    5 #include <iterator>
    +
    6 #include <cassert>
    +
    7 #include <vector>
    +
    8 #include <utility>
    +
    9 #include <algorithm>
    +
    10 #include <type_traits>
    +
    11 #include "../config/config.h"
    +
    12 #include "sparse_set.hpp"
    +
    13 #include "entity.hpp"
    +
    14 #include "fwd.hpp"
    +
    15 
    +
    16 
    +
    17 namespace entt {
    +
    18 
    +
    19 
    +
    58 template<typename Entity>
    +
    59 class basic_runtime_view {
    +
    61  friend class basic_registry<Entity>;
    +
    62 
    +
    63  using underlying_iterator_type = typename sparse_set<Entity>::iterator_type;
    +
    64 
    +
    65  class iterator {
    +
    66  friend class basic_runtime_view<Entity>;
    +
    67 
    +
    68  iterator(underlying_iterator_type first, underlying_iterator_type last, const sparse_set<Entity> * const *others, const sparse_set<Entity> * const *length) ENTT_NOEXCEPT
    +
    69  : begin{first},
    +
    70  end{last},
    +
    71  from{others},
    +
    72  to{length}
    +
    73  {
    +
    74  if(begin != end && !valid()) {
    +
    75  ++(*this);
    +
    76  }
    +
    77  }
    +
    78 
    +
    79  bool valid() const ENTT_NOEXCEPT {
    +
    80  return std::all_of(from, to, [entt = *begin](const auto *view) {
    +
    81  return view->has(entt);
    +
    82  });
    +
    83  }
    +
    84 
    +
    85  public:
    +
    86  using difference_type = typename underlying_iterator_type::difference_type;
    +
    87  using value_type = typename underlying_iterator_type::value_type;
    +
    88  using pointer = typename underlying_iterator_type::pointer;
    +
    89  using reference = typename underlying_iterator_type::reference;
    +
    90  using iterator_category = std::forward_iterator_tag;
    +
    91 
    +
    92  iterator() ENTT_NOEXCEPT = default;
    +
    93 
    +
    94  iterator & operator++() ENTT_NOEXCEPT {
    +
    95  return (++begin != end && !valid()) ? ++(*this) : *this;
    +
    96  }
    +
    97 
    +
    98  iterator operator++(int) ENTT_NOEXCEPT {
    +
    99  iterator orig = *this;
    +
    100  return ++(*this), orig;
    +
    101  }
    +
    102 
    +
    103  bool operator==(const iterator &other) const ENTT_NOEXCEPT {
    +
    104  return other.begin == begin;
    +
    105  }
    +
    106 
    +
    107  bool operator!=(const iterator &other) const ENTT_NOEXCEPT {
    +
    108  return !(*this == other);
    +
    109  }
    +
    110 
    +
    111  pointer operator->() const ENTT_NOEXCEPT {
    +
    112  return begin.operator->();
    +
    113  }
    +
    114 
    +
    115  reference operator*() const ENTT_NOEXCEPT {
    +
    116  return *operator->();
    +
    117  }
    +
    118 
    +
    119  private:
    +
    120  underlying_iterator_type begin;
    +
    121  underlying_iterator_type end;
    +
    122  const sparse_set<Entity> * const *from;
    +
    123  const sparse_set<Entity> * const *to;
    +
    124  };
    +
    125 
    +
    126  basic_runtime_view(std::vector<const sparse_set<Entity> *> others) ENTT_NOEXCEPT
    +
    127  : pools{std::move(others)}
    +
    128  {
    +
    129  const auto it = std::min_element(pools.begin(), pools.end(), [](const auto *lhs, const auto *rhs) {
    +
    130  return (!lhs && rhs) || (lhs && rhs && lhs->size() < rhs->size());
    +
    131  });
    +
    132 
    +
    133  // brings the best candidate (if any) on front of the vector
    +
    134  std::rotate(pools.begin(), it, pools.end());
    +
    135  }
    +
    136 
    +
    137  bool valid() const ENTT_NOEXCEPT {
    +
    138  return !pools.empty() && pools.front();
    +
    139  }
    +
    140 
    +
    141 public:
    +
    143  using entity_type = Entity;
    +
    145  using size_type = std::size_t;
    +
    147  using iterator_type = iterator;
    +
    148 
    +
    153  size_type size() const ENTT_NOEXCEPT {
    +
    154  return valid() ? pools.front()->size() : size_type{};
    +
    155  }
    +
    156 
    +
    161  bool empty() const ENTT_NOEXCEPT {
    +
    162  return !valid() || pools.front()->empty();
    +
    163  }
    +
    164 
    +
    179  iterator_type begin() const ENTT_NOEXCEPT {
    +
    180  iterator_type it{};
    +
    181 
    +
    182  if(valid()) {
    +
    183  const auto &pool = *pools.front();
    +
    184  const auto * const *data = pools.data();
    +
    185  it = { pool.begin(), pool.end(), data + 1, data + pools.size() };
    +
    186  }
    +
    187 
    +
    188  return it;
    +
    189  }
    +
    190 
    +
    206  iterator_type end() const ENTT_NOEXCEPT {
    +
    207  iterator_type it{};
    +
    208 
    +
    209  if(valid()) {
    +
    210  const auto &pool = *pools.front();
    +
    211  it = { pool.end(), pool.end(), nullptr, nullptr };
    +
    212  }
    +
    213 
    +
    214  return it;
    +
    215  }
    +
    216 
    +
    222  bool contains(const entity_type entt) const ENTT_NOEXCEPT {
    +
    223  return valid() && std::all_of(pools.cbegin(), pools.cend(), [entt](const auto *view) {
    +
    224  return view->find(entt) != view->end();
    +
    225  });
    +
    226  }
    +
    227 
    +
    243  template<typename Func>
    +
    244  void each(Func func) const {
    +
    245  std::for_each(begin(), end(), func);
    +
    246  }
    +
    247 
    +
    248 private:
    +
    249  std::vector<const sparse_set<Entity> *> pools;
    +
    250 };
    +
    251 
    +
    252 
    +
    253 }
    +
    254 
    +
    255 
    +
    256 #endif // ENTT_ENTITY_RUNTIME_VIEW_HPP
    +
    iterator iterator_type
    Input iterator type.
    +
    size_type size() const ENTT_NOEXCEPT
    Estimates the number of entities that have the given components.
    +
    iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the first entity that has the given components.
    +
    Basic sparse set implementation.
    Definition: sparse_set.hpp:50
    +
    Runtime view.
    Definition: fwd.hpp:21
    +
    basic_view< entity, Types... > view
    Alias declaration for the most common use case.
    Definition: fwd.hpp:76
    +
    bool contains(const entity_type entt) const ENTT_NOEXCEPT
    Checks if a view contains an entity.
    +
    void each(Func func) const
    Iterates entities and applies the given function object to them.
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    iterator_type end() const ENTT_NOEXCEPT
    Returns an iterator that is past the last entity that has the given components.
    +
    bool empty() const ENTT_NOEXCEPT
    Checks if the view is definitely empty.
    +
    std::size_t size_type
    Unsigned integer type.
    +
    constexpr bool operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT
    Compares two hashed strings.
    +
    Fast and reliable entity-component system.
    Definition: fwd.hpp:13
    +
    Entity entity_type
    Underlying entity identifier.
    +
    View.
    Definition: fwd.hpp:17
    +
    iterator iterator_type
    Random access iterator type.
    Definition: sparse_set.hpp:182
    diff --git a/scheduler_8hpp_source.html b/scheduler_8hpp_source.html index 86ef2230e..31e38dede 100644 --- a/scheduler_8hpp_source.html +++ b/scheduler_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/process/scheduler.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    scheduler.hpp
    -
    1 #ifndef ENTT_PROCESS_SCHEDULER_HPP
    2 #define ENTT_PROCESS_SCHEDULER_HPP
    3 
    4 
    5 #include <vector>
    6 #include <memory>
    7 #include <utility>
    8 #include <algorithm>
    9 #include <type_traits>
    10 #include "../config/config.h"
    11 #include "process.hpp"
    12 
    13 
    14 namespace entt {
    15 
    16 
    43 template<typename Delta>
    44 class scheduler {
    45  struct process_handler {
    46  using instance_type = std::unique_ptr<void, void(*)(void *)>;
    47  using update_fn_type = bool(process_handler &, Delta, void *);
    48  using abort_fn_type = void(process_handler &, bool);
    49  using next_type = std::unique_ptr<process_handler>;
    50 
    51  instance_type instance;
    52  update_fn_type *update;
    53  abort_fn_type *abort;
    54  next_type next;
    55  };
    56 
    57  struct continuation {
    58  continuation(process_handler *ref)
    59  : handler{ref}
    60  {
    61  ENTT_ASSERT(handler);
    62  }
    63 
    64  template<typename Proc, typename... Args>
    65  continuation then(Args &&... args) {
    66  static_assert(std::is_base_of_v<process<Proc, Delta>, Proc>);
    67  auto proc = typename process_handler::instance_type{new Proc{std::forward<Args>(args)...}, &scheduler::deleter<Proc>};
    68  handler->next.reset(new process_handler{std::move(proc), &scheduler::update<Proc>, &scheduler::abort<Proc>, nullptr});
    69  handler = handler->next.get();
    70  return *this;
    71  }
    72 
    73  template<typename Func>
    74  continuation then(Func &&func) {
    75  return then<process_adaptor<std::decay_t<Func>, Delta>>(std::forward<Func>(func));
    76  }
    77 
    78  private:
    79  process_handler *handler;
    80  };
    81 
    82  template<typename Proc>
    83  static bool update(process_handler &handler, const Delta delta, void *data) {
    84  auto *process = static_cast<Proc *>(handler.instance.get());
    85  process->tick(delta, data);
    86 
    87  auto dead = process->dead();
    88 
    89  if(dead) {
    90  if(handler.next && !process->rejected()) {
    91  handler = std::move(*handler.next);
    92  // forces the process to exit the uninitialized state
    93  dead = handler.update(handler, {}, nullptr);
    94  } else {
    95  handler.instance.reset();
    96  }
    97  }
    98 
    99  return dead;
    100  }
    101 
    102  template<typename Proc>
    103  static void abort(process_handler &handler, const bool immediately) {
    104  static_cast<Proc *>(handler.instance.get())->abort(immediately);
    105  }
    106 
    107  template<typename Proc>
    108  static void deleter(void *proc) {
    109  delete static_cast<Proc *>(proc);
    110  }
    111 
    112 public:
    114  using size_type = std::size_t;
    115 
    117  scheduler() ENTT_NOEXCEPT = default;
    118 
    120  scheduler(scheduler &&) = default;
    121 
    123  scheduler & operator=(scheduler &&) = default;
    124 
    129  size_type size() const ENTT_NOEXCEPT {
    130  return handlers.size();
    131  }
    132 
    137  bool empty() const ENTT_NOEXCEPT {
    138  return handlers.empty();
    139  }
    140 
    147  void clear() {
    148  handlers.clear();
    149  }
    150 
    176  template<typename Proc, typename... Args>
    177  auto attach(Args &&... args) {
    178  static_assert(std::is_base_of_v<process<Proc, Delta>, Proc>);
    179  auto proc = typename process_handler::instance_type{new Proc{std::forward<Args>(args)...}, &scheduler::deleter<Proc>};
    180  process_handler handler{std::move(proc), &scheduler::update<Proc>, &scheduler::abort<Proc>, nullptr};
    181  // forces the process to exit the uninitialized state
    182  handler.update(handler, {}, nullptr);
    183  return continuation{&handlers.emplace_back(std::move(handler))};
    184  }
    185 
    237  template<typename Func>
    238  auto attach(Func &&func) {
    239  using Proc = process_adaptor<std::decay_t<Func>, Delta>;
    240  return attach<Proc>(std::forward<Func>(func));
    241  }
    242 
    254  void update(const Delta delta, void *data = nullptr) {
    255  bool clean = false;
    256 
    257  for(auto pos = handlers.size(); pos; --pos) {
    258  auto &handler = handlers[pos-1];
    259  const bool dead = handler.update(handler, delta, data);
    260  clean = clean || dead;
    261  }
    262 
    263  if(clean) {
    264  handlers.erase(std::remove_if(handlers.begin(), handlers.end(), [](auto &handler) {
    265  return !handler.instance;
    266  }), handlers.end());
    267  }
    268  }
    269 
    280  void abort(const bool immediately = false) {
    281  decltype(handlers) exec;
    282  exec.swap(handlers);
    283 
    284  std::for_each(exec.begin(), exec.end(), [immediately](auto &handler) {
    285  handler.abort(handler, immediately);
    286  });
    287 
    288  std::move(handlers.begin(), handlers.end(), std::back_inserter(exec));
    289  handlers.swap(exec);
    290  }
    291 
    292 private:
    293  std::vector<process_handler> handlers{};
    294 };
    295 
    296 
    297 }
    298 
    299 
    300 #endif // ENTT_PROCESS_SCHEDULER_HPP
    bool rejected() const ENTT_NOEXCEPT
    Returns true if a process terminated with errors.
    Definition: process.hpp:224
    -
    void update(const Delta delta, void *data=nullptr)
    Updates all scheduled processes.
    Definition: scheduler.hpp:254
    -
    bool dead() const ENTT_NOEXCEPT
    Returns true if a process is already terminated.
    Definition: process.hpp:208
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    scheduler() ENTT_NOEXCEPT=default
    Default constructor.
    -
    size_type size() const ENTT_NOEXCEPT
    Number of processes currently scheduled.
    Definition: scheduler.hpp:129
    -
    auto attach(Func &&func)
    Schedules a process for the next tick.
    Definition: scheduler.hpp:238
    -
    bool empty() const ENTT_NOEXCEPT
    Returns true if at least a process is currently scheduled.
    Definition: scheduler.hpp:137
    -
    Base class for processes.
    Definition: process.hpp:73
    -
    Adaptor for lambdas and functors to turn them into processes.
    Definition: process.hpp:315
    -
    void clear()
    Discards all scheduled processes.
    Definition: scheduler.hpp:147
    -
    void abort(const bool immediately=false)
    Aborts all scheduled processes.
    Definition: scheduler.hpp:280
    -
    Cooperative scheduler for processes.
    Definition: scheduler.hpp:44
    -
    std::size_t size_type
    Unsigned integer type.
    Definition: scheduler.hpp:114
    -
    auto attach(Args &&... args)
    Schedules a process for the next tick.
    Definition: scheduler.hpp:177
    +
    1 #ifndef ENTT_PROCESS_SCHEDULER_HPP
    +
    2 #define ENTT_PROCESS_SCHEDULER_HPP
    +
    3 
    +
    4 
    +
    5 #include <vector>
    +
    6 #include <memory>
    +
    7 #include <utility>
    +
    8 #include <algorithm>
    +
    9 #include <type_traits>
    +
    10 #include "../config/config.h"
    +
    11 #include "process.hpp"
    +
    12 
    +
    13 
    +
    14 namespace entt {
    +
    15 
    +
    16 
    +
    43 template<typename Delta>
    +
    44 class scheduler {
    +
    45  struct process_handler {
    +
    46  using instance_type = std::unique_ptr<void, void(*)(void *)>;
    +
    47  using update_fn_type = bool(process_handler &, Delta, void *);
    +
    48  using abort_fn_type = void(process_handler &, bool);
    +
    49  using next_type = std::unique_ptr<process_handler>;
    +
    50 
    +
    51  instance_type instance;
    +
    52  update_fn_type *update;
    +
    53  abort_fn_type *abort;
    +
    54  next_type next;
    +
    55  };
    +
    56 
    +
    57  struct continuation {
    +
    58  continuation(process_handler *ref)
    +
    59  : handler{ref}
    +
    60  {
    +
    61  ENTT_ASSERT(handler);
    +
    62  }
    +
    63 
    +
    64  template<typename Proc, typename... Args>
    +
    65  continuation then(Args &&... args) {
    +
    66  static_assert(std::is_base_of_v<process<Proc, Delta>, Proc>);
    +
    67  auto proc = typename process_handler::instance_type{new Proc{std::forward<Args>(args)...}, &scheduler::deleter<Proc>};
    +
    68  handler->next.reset(new process_handler{std::move(proc), &scheduler::update<Proc>, &scheduler::abort<Proc>, nullptr});
    +
    69  handler = handler->next.get();
    +
    70  return *this;
    +
    71  }
    +
    72 
    +
    73  template<typename Func>
    +
    74  continuation then(Func &&func) {
    +
    75  return then<process_adaptor<std::decay_t<Func>, Delta>>(std::forward<Func>(func));
    +
    76  }
    +
    77 
    +
    78  private:
    +
    79  process_handler *handler;
    +
    80  };
    +
    81 
    +
    82  template<typename Proc>
    +
    83  static bool update(process_handler &handler, const Delta delta, void *data) {
    +
    84  auto *process = static_cast<Proc *>(handler.instance.get());
    +
    85  process->tick(delta, data);
    +
    86 
    +
    87  auto dead = process->dead();
    +
    88 
    +
    89  if(dead) {
    +
    90  if(handler.next && !process->rejected()) {
    +
    91  handler = std::move(*handler.next);
    +
    92  // forces the process to exit the uninitialized state
    +
    93  dead = handler.update(handler, {}, nullptr);
    +
    94  } else {
    +
    95  handler.instance.reset();
    +
    96  }
    +
    97  }
    +
    98 
    +
    99  return dead;
    +
    100  }
    +
    101 
    +
    102  template<typename Proc>
    +
    103  static void abort(process_handler &handler, const bool immediately) {
    +
    104  static_cast<Proc *>(handler.instance.get())->abort(immediately);
    +
    105  }
    +
    106 
    +
    107  template<typename Proc>
    +
    108  static void deleter(void *proc) {
    +
    109  delete static_cast<Proc *>(proc);
    +
    110  }
    +
    111 
    +
    112 public:
    +
    114  using size_type = std::size_t;
    +
    115 
    +
    117  scheduler() ENTT_NOEXCEPT = default;
    +
    118 
    +
    120  scheduler(scheduler &&) = default;
    +
    121 
    +
    123  scheduler & operator=(scheduler &&) = default;
    +
    124 
    +
    129  size_type size() const ENTT_NOEXCEPT {
    +
    130  return handlers.size();
    +
    131  }
    +
    132 
    +
    137  bool empty() const ENTT_NOEXCEPT {
    +
    138  return handlers.empty();
    +
    139  }
    +
    140 
    +
    147  void clear() {
    +
    148  handlers.clear();
    +
    149  }
    +
    150 
    +
    176  template<typename Proc, typename... Args>
    +
    177  auto attach(Args &&... args) {
    +
    178  static_assert(std::is_base_of_v<process<Proc, Delta>, Proc>);
    +
    179  auto proc = typename process_handler::instance_type{new Proc{std::forward<Args>(args)...}, &scheduler::deleter<Proc>};
    +
    180  process_handler handler{std::move(proc), &scheduler::update<Proc>, &scheduler::abort<Proc>, nullptr};
    +
    181  // forces the process to exit the uninitialized state
    +
    182  handler.update(handler, {}, nullptr);
    +
    183  return continuation{&handlers.emplace_back(std::move(handler))};
    +
    184  }
    +
    185 
    +
    237  template<typename Func>
    +
    238  auto attach(Func &&func) {
    +
    239  using Proc = process_adaptor<std::decay_t<Func>, Delta>;
    +
    240  return attach<Proc>(std::forward<Func>(func));
    +
    241  }
    +
    242 
    +
    254  void update(const Delta delta, void *data = nullptr) {
    +
    255  bool clean = false;
    +
    256 
    +
    257  for(auto pos = handlers.size(); pos; --pos) {
    +
    258  auto &handler = handlers[pos-1];
    +
    259  const bool dead = handler.update(handler, delta, data);
    +
    260  clean = clean || dead;
    +
    261  }
    +
    262 
    +
    263  if(clean) {
    +
    264  handlers.erase(std::remove_if(handlers.begin(), handlers.end(), [](auto &handler) {
    +
    265  return !handler.instance;
    +
    266  }), handlers.end());
    +
    267  }
    +
    268  }
    +
    269 
    +
    280  void abort(const bool immediately = false) {
    +
    281  decltype(handlers) exec;
    +
    282  exec.swap(handlers);
    +
    283 
    +
    284  std::for_each(exec.begin(), exec.end(), [immediately](auto &handler) {
    +
    285  handler.abort(handler, immediately);
    +
    286  });
    +
    287 
    +
    288  std::move(handlers.begin(), handlers.end(), std::back_inserter(exec));
    +
    289  handlers.swap(exec);
    +
    290  }
    +
    291 
    +
    292 private:
    +
    293  std::vector<process_handler> handlers{};
    +
    294 };
    +
    295 
    +
    296 
    +
    297 }
    +
    298 
    +
    299 
    +
    300 #endif // ENTT_PROCESS_SCHEDULER_HPP
    +
    bool rejected() const ENTT_NOEXCEPT
    Returns true if a process terminated with errors.
    Definition: process.hpp:224
    +
    auto attach(Func &&func)
    Schedules a process for the next tick.
    Definition: scheduler.hpp:238
    +
    bool dead() const ENTT_NOEXCEPT
    Returns true if a process is already terminated.
    Definition: process.hpp:208
    +
    void clear()
    Discards all scheduled processes.
    Definition: scheduler.hpp:147
    +
    Cooperative scheduler for processes.
    Definition: scheduler.hpp:44
    +
    Base class for processes.
    Definition: process.hpp:73
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    std::size_t size_type
    Unsigned integer type.
    Definition: scheduler.hpp:114
    +
    void abort(const bool immediately=false)
    Aborts all scheduled processes.
    Definition: scheduler.hpp:280
    +
    bool empty() const ENTT_NOEXCEPT
    Returns true if at least a process is currently scheduled.
    Definition: scheduler.hpp:137
    +
    scheduler() ENTT_NOEXCEPT=default
    Default constructor.
    +
    void update(const Delta delta, void *data=nullptr)
    Updates all scheduled processes.
    Definition: scheduler.hpp:254
    +
    Adaptor for lambdas and functors to turn them into processes.
    Definition: process.hpp:315
    +
    auto attach(Args &&... args)
    Schedules a process for the next tick.
    Definition: scheduler.hpp:177
    +
    size_type size() const ENTT_NOEXCEPT
    Number of processes currently scheduled.
    Definition: scheduler.hpp:129
    diff --git a/search/all_0.html b/search/all_0.html index f25360b71..a52d5f053 100644 --- a/search/all_0.html +++ b/search/all_0.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_0.js b/search/all_0.js index 3ba45c2f5..956ed62ff 100644 --- a/search/all_0.js +++ b/search/all_0.js @@ -1,17 +1,17 @@ var searchData= [ - ['abort',['abort',['../classentt_1_1process.html#a0a45fb64300d51aa0f826609d11a3f78',1,'entt::process::abort()'],['../classentt_1_1scheduler.html#aabc25388bff1b3b0770f913f54b915f2',1,'entt::scheduler::abort()']]], - ['actor',['actor',['../namespaceentt.html#a3effdbc1557d9b1ffaed77f843c5c2cd',1,'entt']]], - ['alive',['alive',['../classentt_1_1basic__registry.html#a65a49772b3d59dd39c76b24a62e0fdf4',1,'entt::basic_registry::alive()'],['../classentt_1_1process.html#a8bc92bd0304659eb2a034fae65f1eeb9',1,'entt::process::alive()']]], - ['arg',['arg',['../structentt_1_1meta__ctor.html#a3faab3b8c49ee1b803f337435c8d54ce',1,'entt::meta_ctor::arg()'],['../structentt_1_1meta__func.html#a34709d9f0a7498382ced3a4e2daa64ba',1,'entt::meta_func::arg()']]], - ['arrange',['arrange',['../classentt_1_1sparse__set.html#a28b36afb6ae6f91d995ff259184d6515',1,'entt::sparse_set']]], - ['as_5falias',['as_alias',['../namespaceentt.html#abb24e649324b83ebcf9dea9c970b1e2d',1,'entt']]], - ['as_5falias_5ft',['as_alias_t',['../structentt_1_1as__alias__t.html',1,'entt']]], - ['as_5fgroup',['as_group',['../structentt_1_1as__group.html',1,'entt::as_group< Const, Entity >'],['../structentt_1_1as__group.html#a7ebe095efa7c1e00e2f156ad7930d9a9',1,'entt::as_group::as_group()'],['../namespaceentt.html#a6609f31d6ab3f544ebf7d0413d007ead',1,'entt::as_group(basic_registry< Entity > &) ENTT_NOEXCEPT -> as_group< false, Entity >'],['../namespaceentt.html#a8fce796266ac507c9b0c193a70f51745',1,'entt::as_group(const basic_registry< Entity > &) ENTT_NOEXCEPT -> as_group< true, Entity >']]], - ['as_5fis_5ft',['as_is_t',['../structentt_1_1as__is__t.html',1,'entt']]], - ['as_5fview',['as_view',['../structentt_1_1as__view.html',1,'entt::as_view< Const, Entity >'],['../structentt_1_1as__view.html#a820ab4da509a0fb60c4edf8ea24b748a',1,'entt::as_view::as_view()'],['../namespaceentt.html#a3fee75741468f7807d3d48dd807ee024',1,'entt::as_view(basic_registry< Entity > &) ENTT_NOEXCEPT -> as_view< false, Entity >'],['../namespaceentt.html#aac314d83c9af1077857f01975f086bed',1,'entt::as_view(const basic_registry< Entity > &) ENTT_NOEXCEPT -> as_view< true, Entity >']]], - ['as_5fvoid_5ft',['as_void_t',['../structentt_1_1as__void__t.html',1,'entt']]], - ['assign',['assign',['../structentt_1_1basic__actor.html#abf572e19a5d9625fbf80cc4f00cba032',1,'entt::basic_actor::assign()'],['../classentt_1_1basic__registry.html#a3deb5b8f14eb1414c92e6ccb2065ce0e',1,'entt::basic_registry::assign()']]], - ['assign_5for_5freplace',['assign_or_replace',['../classentt_1_1basic__registry.html#aa013d9c67f8fda068f616aa9bb66b564',1,'entt::basic_registry']]], - ['attach',['attach',['../classentt_1_1scheduler.html#a729c83e1983123c642a08cda67e486e3',1,'entt::scheduler::attach(Args &&... args)'],['../classentt_1_1scheduler.html#a871812d08af8483316d1ce5d1e9d686f',1,'entt::scheduler::attach(Func &&func)']]] + ['abort_0',['abort',['../classentt_1_1process.html#a0a45fb64300d51aa0f826609d11a3f78',1,'entt::process::abort()'],['../classentt_1_1scheduler.html#aabc25388bff1b3b0770f913f54b915f2',1,'entt::scheduler::abort()']]], + ['actor_1',['actor',['../namespaceentt.html#a3effdbc1557d9b1ffaed77f843c5c2cd',1,'entt']]], + ['alive_2',['alive',['../classentt_1_1basic__registry.html#a65a49772b3d59dd39c76b24a62e0fdf4',1,'entt::basic_registry::alive()'],['../classentt_1_1process.html#a8bc92bd0304659eb2a034fae65f1eeb9',1,'entt::process::alive()']]], + ['arg_3',['arg',['../structentt_1_1meta__ctor.html#a3faab3b8c49ee1b803f337435c8d54ce',1,'entt::meta_ctor::arg()'],['../structentt_1_1meta__func.html#a34709d9f0a7498382ced3a4e2daa64ba',1,'entt::meta_func::arg()']]], + ['arrange_4',['arrange',['../classentt_1_1sparse__set.html#a28b36afb6ae6f91d995ff259184d6515',1,'entt::sparse_set']]], + ['as_5falias_5',['as_alias',['../namespaceentt.html#abb24e649324b83ebcf9dea9c970b1e2d',1,'entt']]], + ['as_5falias_5ft_6',['as_alias_t',['../structentt_1_1as__alias__t.html',1,'entt']]], + ['as_5fgroup_7',['as_group',['../structentt_1_1as__group.html',1,'entt::as_group< Const, Entity >'],['../structentt_1_1as__group.html#a7ebe095efa7c1e00e2f156ad7930d9a9',1,'entt::as_group::as_group()'],['../namespaceentt.html#a6609f31d6ab3f544ebf7d0413d007ead',1,'entt::as_group(basic_registry< Entity > &) ENTT_NOEXCEPT -> as_group< false, Entity >'],['../namespaceentt.html#a8fce796266ac507c9b0c193a70f51745',1,'entt::as_group(const basic_registry< Entity > &) ENTT_NOEXCEPT -> as_group< true, Entity >']]], + ['as_5fis_5ft_8',['as_is_t',['../structentt_1_1as__is__t.html',1,'entt']]], + ['as_5fview_9',['as_view',['../structentt_1_1as__view.html',1,'entt::as_view< Const, Entity >'],['../structentt_1_1as__view.html#a820ab4da509a0fb60c4edf8ea24b748a',1,'entt::as_view::as_view()'],['../namespaceentt.html#a3fee75741468f7807d3d48dd807ee024',1,'entt::as_view(basic_registry< Entity > &) ENTT_NOEXCEPT -> as_view< false, Entity >'],['../namespaceentt.html#aac314d83c9af1077857f01975f086bed',1,'entt::as_view(const basic_registry< Entity > &) ENTT_NOEXCEPT -> as_view< true, Entity >']]], + ['as_5fvoid_5ft_10',['as_void_t',['../structentt_1_1as__void__t.html',1,'entt']]], + ['assign_11',['assign',['../structentt_1_1basic__actor.html#abf572e19a5d9625fbf80cc4f00cba032',1,'entt::basic_actor::assign()'],['../classentt_1_1basic__registry.html#a3deb5b8f14eb1414c92e6ccb2065ce0e',1,'entt::basic_registry::assign()']]], + ['assign_5for_5freplace_12',['assign_or_replace',['../classentt_1_1basic__registry.html#aa013d9c67f8fda068f616aa9bb66b564',1,'entt::basic_registry']]], + ['attach_13',['attach',['../classentt_1_1scheduler.html#a729c83e1983123c642a08cda67e486e3',1,'entt::scheduler::attach(Args &&... args)'],['../classentt_1_1scheduler.html#a871812d08af8483316d1ce5d1e9d686f',1,'entt::scheduler::attach(Func &&func)']]] ]; diff --git a/search/all_1.html b/search/all_1.html index b13f0f7f3..0fcb70401 100644 --- a/search/all_1.html +++ b/search/all_1.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_1.js b/search/all_1.js index 2787dac03..17eb8aaee 100644 --- a/search/all_1.js +++ b/search/all_1.js @@ -1,33 +1,33 @@ var searchData= [ - ['backend',['backend',['../structentt_1_1basic__actor.html#a079bddd72566b14843729a154a8f684e',1,'entt::basic_actor::backend() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a827ed2e23e39e8b706f7acc511a46024',1,'entt::basic_actor::backend() ENTT_NOEXCEPT']]], - ['base',['base',['../classentt_1_1meta__factory.html#a2387e5bc85a87e3c936d82a956805bfb',1,'entt::meta_factory::base()'],['../classentt_1_1meta__type.html#ace805045bd4049fb839d1b92f89b1999',1,'entt::meta_type::base(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae42527a8a5aaaf5eeb684aca37399569',1,'entt::meta_type::base(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]], - ['basic_5factor',['basic_actor',['../structentt_1_1basic__actor.html',1,'entt::basic_actor< Entity >'],['../structentt_1_1basic__actor.html#a32635ae3046ebca665adef6b3ef87ef3',1,'entt::basic_actor::basic_actor(registry_type &ref)'],['../structentt_1_1basic__actor.html#a3633aea0c287c0de909dc1d7aad80aef',1,'entt::basic_actor::basic_actor(entity_type entity, registry_type &ref)'],['../structentt_1_1basic__actor.html#a8c86ac43873d5b42c1774ea6646513e0',1,'entt::basic_actor::basic_actor(basic_actor &&other)']]], - ['basic_5fcollector',['basic_collector',['../structentt_1_1basic__collector.html',1,'entt']]], - ['basic_5fcollector_3c_20matcher_3c_20type_5flist_3c_20reject_2e_2e_2e_20_3e_2c_20type_5flist_3c_20require_2e_2e_2e_20_3e_2c_20rule_2e_2e_2e_20_3e_2c_20other_2e_2e_2e_20_3e',['basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html',1,'entt']]], - ['basic_5fcollector_3c_3e',['basic_collector<>',['../structentt_1_1basic__collector_3_4.html',1,'entt']]], - ['basic_5fcontinuous_5floader',['basic_continuous_loader',['../classentt_1_1basic__continuous__loader.html',1,'entt::basic_continuous_loader< Entity >'],['../classentt_1_1basic__continuous__loader.html#a18d87fd5fc80f062ae27b90ef3232bd8',1,'entt::basic_continuous_loader::basic_continuous_loader(basic_registry< entity_type > &source) ENTT_NOEXCEPT'],['../classentt_1_1basic__continuous__loader.html#a619f3aa278b405481fd1e26c46a96a5c',1,'entt::basic_continuous_loader::basic_continuous_loader(basic_continuous_loader &&)=default']]], - ['basic_5fgroup',['basic_group',['../classentt_1_1basic__group.html',1,'entt']]], - ['basic_5fgroup_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20get_5ft_3c_20get_2e_2e_2e_20_3e_20_3e',['basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html',1,'entt']]], - ['basic_5fgroup_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20get_5ft_3c_20get_2e_2e_2e_20_3e_2c_20owned_2e_2e_2e_20_3e',['basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html',1,'entt']]], - ['basic_5fhashed_5fstring',['basic_hashed_string',['../classentt_1_1basic__hashed__string.html',1,'entt::basic_hashed_string< Char >'],['../classentt_1_1basic__hashed__string.html#a2c75763872c028b062701523e0314f29',1,'entt::basic_hashed_string::basic_hashed_string() ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#aac422f04d11c1e5573f04809c1e1c106',1,'entt::basic_hashed_string::basic_hashed_string(const value_type(&curr)[N]) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#a7ab5e09f3e552436872bcaaf9ca2c1ac',1,'entt::basic_hashed_string::basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT'],['../namespaceentt.html#a32ab4306d014ba95869e88be161145b0',1,'entt::basic_hashed_string()']]], - ['basic_5fobserver',['basic_observer',['../classentt_1_1basic__observer.html',1,'entt::basic_observer< Entity >'],['../classentt_1_1basic__observer.html#a31d9929b1c6d0b422ecbccff86803d3c',1,'entt::basic_observer::basic_observer() ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#aa685204c94266b5631c13540012e73c2',1,'entt::basic_observer::basic_observer(const basic_observer &)=delete'],['../classentt_1_1basic__observer.html#accbe2546b1b74de1a59e673cb6250413',1,'entt::basic_observer::basic_observer(basic_observer &&)=delete'],['../classentt_1_1basic__observer.html#a2290c465994e6af15f1fe7b35541ffbd',1,'entt::basic_observer::basic_observer(basic_registry< entity_type > &reg, basic_collector< Matcher... >) ENTT_NOEXCEPT']]], - ['basic_5fregistry',['basic_registry',['../classentt_1_1basic__registry.html',1,'entt::basic_registry< Entity >'],['../classentt_1_1basic__registry.html#af976c68848de4fa6db6dea2b4cf76e77',1,'entt::basic_registry::basic_registry() ENTT_NOEXCEPT=default'],['../classentt_1_1basic__registry.html#a3fc181b150fee3e42b8cad4103953b9f',1,'entt::basic_registry::basic_registry(basic_registry &&)=default']]], - ['basic_5fregistry_3c_20entity_20_3e',['basic_registry< Entity >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::basic_registry< Entity >()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::basic_registry< Entity >()'],['../classentt_1_1basic__runtime__view.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_runtime_view::basic_registry< Entity >()'],['../classentt_1_1basic__snapshot.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_snapshot::basic_registry< Entity >()'],['../classentt_1_1basic__snapshot__loader.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_snapshot_loader::basic_registry< Entity >()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::basic_registry< Entity >()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_view< Entity, exclude_t<>, Component >::basic_registry< Entity >()']]], - ['basic_5fregistry_3c_20entity_5ftype_20_3e',['basic_registry< entity_type >',['../classentt_1_1basic__registry.html',1,'entt']]], - ['basic_5fruntime_5fview',['basic_runtime_view',['../classentt_1_1basic__runtime__view.html',1,'entt']]], - ['basic_5fsnapshot',['basic_snapshot',['../classentt_1_1basic__snapshot.html',1,'entt::basic_snapshot< Entity >'],['../classentt_1_1basic__snapshot.html#a10f658d8e4feb7df9da8b48119551334',1,'entt::basic_snapshot::basic_snapshot()']]], - ['basic_5fsnapshot_5floader',['basic_snapshot_loader',['../classentt_1_1basic__snapshot__loader.html',1,'entt::basic_snapshot_loader< Entity >'],['../classentt_1_1basic__snapshot__loader.html#acc078b2e9068ae41a2910168b40322d4',1,'entt::basic_snapshot_loader::basic_snapshot_loader()']]], - ['basic_5fstorage',['basic_storage',['../classentt_1_1basic__storage.html',1,'entt']]], - ['basic_5fstorage_3c_20entity_2c_20component_20_3e',['basic_storage< Entity, Component >',['../classentt_1_1basic__storage.html',1,'entt']]], - ['basic_5fstorage_3c_20entity_2c_20type_20_3e',['basic_storage< Entity, Type >',['../classentt_1_1basic__storage.html',1,'entt']]], - ['basic_5fstorage_3c_20entity_2c_20type_2c_20std_3a_3aenable_5fif_5ft_3c_20entt_5fenable_5feto_28type_29_3e_20_3e',['basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >',['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html',1,'entt']]], - ['basic_5fstorage_3c_20entity_5ftype_2c_20payload_5ftype_20_3e',['basic_storage< entity_type, payload_type >',['../classentt_1_1basic__storage.html',1,'entt']]], - ['basic_5fview',['basic_view',['../classentt_1_1basic__view.html',1,'entt']]], - ['basic_5fview_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20component_2e_2e_2e_20_3e',['basic_view< Entity, exclude_t< Exclude... >, Component... >',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html',1,'entt']]], - ['basic_5fview_3c_20entity_2c_20exclude_5ft_3c_3e_2c_20component_20_3e',['basic_view< Entity, exclude_t<>, Component >',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html',1,'entt']]], - ['batch',['batch',['../classentt_1_1sparse__set.html#a642460f7f0ca8e42220c43c785467063',1,'entt::sparse_set::batch()'],['../classentt_1_1basic__storage.html#a5ef85c69a23deffd46b2dcfafcc4a668',1,'entt::basic_storage::batch()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a66175004c693a405d57722c67b1ceda3',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::batch()']]], - ['before',['before',['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a039ae0c0999aa4e5c42620f08fe85591',1,'entt::sink< Ret(Args...)>::before()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#abf3701984a639f27e2ebc1e962cb3035',1,'entt::sink< Ret(Args...)>::before(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#aa36189084503a35befcd5f443578e88b',1,'entt::sink< Ret(Args...)>::before(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#aff2dec06fde148ab6f74ba8f5a4679c4',1,'entt::sink< Ret(Args...)>::before(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ab8247ff409a75c0276dd003735247863',1,'entt::sink< Ret(Args...)>::before(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a80070f9124f7281cbaf5d01284445f9d',1,'entt::sink< Ret(Args...)>::before()']]], - ['begin',['begin',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a98d938206557463317eac00c8eeaa73e',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::begin()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acc9327669866ff8d39c4a6e6d2bd2333',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::begin()'],['../classentt_1_1basic__observer.html#a33bca86113be57e75ca1da80620763d1',1,'entt::basic_observer::begin()'],['../classentt_1_1basic__runtime__view.html#af47b1aff2d44990f17c9740cf24a2670',1,'entt::basic_runtime_view::begin()'],['../classentt_1_1sparse__set.html#a06743336f265989b48e106a3d3bd1562',1,'entt::sparse_set::begin()'],['../classentt_1_1basic__storage.html#aecc4b13b67a7664c5c36596f2b927bed',1,'entt::basic_storage::begin() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ab963b76ebe297a1ad4a2c433aa55f2b5',1,'entt::basic_storage::begin() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a9676a3940e684f720bd2fc06128a4e2e',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::begin()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a2ec860ee4a88c8ff309b614070b98b15',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::begin()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a2b0108681a38c823de6a4ba49baa3957',1,'entt::basic_view< Entity, exclude_t<>, Component >::begin()']]], - ['bind',['bind',['../structentt_1_1meta__ctx.html#a43f914e2d2470e82b1e5415f60a4f803',1,'entt::meta_ctx']]] + ['backend_14',['backend',['../structentt_1_1basic__actor.html#a079bddd72566b14843729a154a8f684e',1,'entt::basic_actor::backend() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a827ed2e23e39e8b706f7acc511a46024',1,'entt::basic_actor::backend() ENTT_NOEXCEPT']]], + ['base_15',['base',['../classentt_1_1meta__factory.html#a2387e5bc85a87e3c936d82a956805bfb',1,'entt::meta_factory::base()'],['../classentt_1_1meta__type.html#ace805045bd4049fb839d1b92f89b1999',1,'entt::meta_type::base(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae42527a8a5aaaf5eeb684aca37399569',1,'entt::meta_type::base(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]], + ['basic_5factor_16',['basic_actor',['../structentt_1_1basic__actor.html',1,'entt::basic_actor< Entity >'],['../structentt_1_1basic__actor.html#a32635ae3046ebca665adef6b3ef87ef3',1,'entt::basic_actor::basic_actor(registry_type &ref)'],['../structentt_1_1basic__actor.html#a3633aea0c287c0de909dc1d7aad80aef',1,'entt::basic_actor::basic_actor(entity_type entity, registry_type &ref)'],['../structentt_1_1basic__actor.html#a8c86ac43873d5b42c1774ea6646513e0',1,'entt::basic_actor::basic_actor(basic_actor &&other)']]], + ['basic_5fcollector_17',['basic_collector',['../structentt_1_1basic__collector.html',1,'entt']]], + ['basic_5fcollector_3c_20matcher_3c_20type_5flist_3c_20reject_2e_2e_2e_20_3e_2c_20type_5flist_3c_20require_2e_2e_2e_20_3e_2c_20rule_2e_2e_2e_20_3e_2c_20other_2e_2e_2e_20_3e_18',['basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html',1,'entt']]], + ['basic_5fcollector_3c_3e_19',['basic_collector<>',['../structentt_1_1basic__collector_3_4.html',1,'entt']]], + ['basic_5fcontinuous_5floader_20',['basic_continuous_loader',['../classentt_1_1basic__continuous__loader.html',1,'entt::basic_continuous_loader< Entity >'],['../classentt_1_1basic__continuous__loader.html#a18d87fd5fc80f062ae27b90ef3232bd8',1,'entt::basic_continuous_loader::basic_continuous_loader(basic_registry< entity_type > &source) ENTT_NOEXCEPT'],['../classentt_1_1basic__continuous__loader.html#a619f3aa278b405481fd1e26c46a96a5c',1,'entt::basic_continuous_loader::basic_continuous_loader(basic_continuous_loader &&)=default']]], + ['basic_5fgroup_21',['basic_group',['../classentt_1_1basic__group.html',1,'entt']]], + ['basic_5fgroup_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20get_5ft_3c_20get_2e_2e_2e_20_3e_20_3e_22',['basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html',1,'entt']]], + ['basic_5fgroup_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20get_5ft_3c_20get_2e_2e_2e_20_3e_2c_20owned_2e_2e_2e_20_3e_23',['basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html',1,'entt']]], + ['basic_5fhashed_5fstring_24',['basic_hashed_string',['../classentt_1_1basic__hashed__string.html',1,'entt::basic_hashed_string< Char >'],['../classentt_1_1basic__hashed__string.html#a2c75763872c028b062701523e0314f29',1,'entt::basic_hashed_string::basic_hashed_string() ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#aac422f04d11c1e5573f04809c1e1c106',1,'entt::basic_hashed_string::basic_hashed_string(const value_type(&curr)[N]) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#a7ab5e09f3e552436872bcaaf9ca2c1ac',1,'entt::basic_hashed_string::basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT'],['../namespaceentt.html#a32ab4306d014ba95869e88be161145b0',1,'entt::basic_hashed_string()']]], + ['basic_5fobserver_25',['basic_observer',['../classentt_1_1basic__observer.html',1,'entt::basic_observer< Entity >'],['../classentt_1_1basic__observer.html#a31d9929b1c6d0b422ecbccff86803d3c',1,'entt::basic_observer::basic_observer() ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#aa685204c94266b5631c13540012e73c2',1,'entt::basic_observer::basic_observer(const basic_observer &)=delete'],['../classentt_1_1basic__observer.html#accbe2546b1b74de1a59e673cb6250413',1,'entt::basic_observer::basic_observer(basic_observer &&)=delete'],['../classentt_1_1basic__observer.html#a2290c465994e6af15f1fe7b35541ffbd',1,'entt::basic_observer::basic_observer(basic_registry< entity_type > &reg, basic_collector< Matcher... >) ENTT_NOEXCEPT']]], + ['basic_5fregistry_26',['basic_registry',['../classentt_1_1basic__registry.html',1,'entt::basic_registry< Entity >'],['../classentt_1_1basic__registry.html#af976c68848de4fa6db6dea2b4cf76e77',1,'entt::basic_registry::basic_registry() ENTT_NOEXCEPT=default'],['../classentt_1_1basic__registry.html#a3fc181b150fee3e42b8cad4103953b9f',1,'entt::basic_registry::basic_registry(basic_registry &&)=default']]], + ['basic_5fregistry_3c_20entity_20_3e_27',['basic_registry< Entity >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::basic_registry< Entity >()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::basic_registry< Entity >()'],['../classentt_1_1basic__runtime__view.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_runtime_view::basic_registry< Entity >()'],['../classentt_1_1basic__snapshot.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_snapshot::basic_registry< Entity >()'],['../classentt_1_1basic__snapshot__loader.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_snapshot_loader::basic_registry< Entity >()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::basic_registry< Entity >()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_view< Entity, exclude_t<>, Component >::basic_registry< Entity >()']]], + ['basic_5fregistry_3c_20entity_5ftype_20_3e_28',['basic_registry< entity_type >',['../classentt_1_1basic__registry.html',1,'entt']]], + ['basic_5fruntime_5fview_29',['basic_runtime_view',['../classentt_1_1basic__runtime__view.html',1,'entt']]], + ['basic_5fsnapshot_30',['basic_snapshot',['../classentt_1_1basic__snapshot.html',1,'entt::basic_snapshot< Entity >'],['../classentt_1_1basic__snapshot.html#a10f658d8e4feb7df9da8b48119551334',1,'entt::basic_snapshot::basic_snapshot()']]], + ['basic_5fsnapshot_5floader_31',['basic_snapshot_loader',['../classentt_1_1basic__snapshot__loader.html',1,'entt::basic_snapshot_loader< Entity >'],['../classentt_1_1basic__snapshot__loader.html#acc078b2e9068ae41a2910168b40322d4',1,'entt::basic_snapshot_loader::basic_snapshot_loader()']]], + ['basic_5fstorage_32',['basic_storage',['../classentt_1_1basic__storage.html',1,'entt']]], + ['basic_5fstorage_3c_20entity_2c_20component_20_3e_33',['basic_storage< Entity, Component >',['../classentt_1_1basic__storage.html',1,'entt']]], + ['basic_5fstorage_3c_20entity_2c_20type_20_3e_34',['basic_storage< Entity, Type >',['../classentt_1_1basic__storage.html',1,'entt']]], + ['basic_5fstorage_3c_20entity_2c_20type_2c_20std_3a_3aenable_5fif_5ft_3c_20entt_5fenable_5feto_28type_29_3e_20_3e_35',['basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >',['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html',1,'entt']]], + ['basic_5fstorage_3c_20entity_5ftype_2c_20payload_5ftype_20_3e_36',['basic_storage< entity_type, payload_type >',['../classentt_1_1basic__storage.html',1,'entt']]], + ['basic_5fview_37',['basic_view',['../classentt_1_1basic__view.html',1,'entt']]], + ['basic_5fview_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20component_2e_2e_2e_20_3e_38',['basic_view< Entity, exclude_t< Exclude... >, Component... >',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html',1,'entt']]], + ['basic_5fview_3c_20entity_2c_20exclude_5ft_3c_3e_2c_20component_20_3e_39',['basic_view< Entity, exclude_t<>, Component >',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html',1,'entt']]], + ['batch_40',['batch',['../classentt_1_1sparse__set.html#a642460f7f0ca8e42220c43c785467063',1,'entt::sparse_set::batch()'],['../classentt_1_1basic__storage.html#a5ef85c69a23deffd46b2dcfafcc4a668',1,'entt::basic_storage::batch()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a66175004c693a405d57722c67b1ceda3',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::batch()']]], + ['before_41',['before',['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a039ae0c0999aa4e5c42620f08fe85591',1,'entt::sink< Ret(Args...)>::before()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#abf3701984a639f27e2ebc1e962cb3035',1,'entt::sink< Ret(Args...)>::before(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#aa36189084503a35befcd5f443578e88b',1,'entt::sink< Ret(Args...)>::before(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#aff2dec06fde148ab6f74ba8f5a4679c4',1,'entt::sink< Ret(Args...)>::before(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ab8247ff409a75c0276dd003735247863',1,'entt::sink< Ret(Args...)>::before(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a80070f9124f7281cbaf5d01284445f9d',1,'entt::sink< Ret(Args...)>::before()']]], + ['begin_42',['begin',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a98d938206557463317eac00c8eeaa73e',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::begin()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acc9327669866ff8d39c4a6e6d2bd2333',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::begin()'],['../classentt_1_1basic__observer.html#a33bca86113be57e75ca1da80620763d1',1,'entt::basic_observer::begin()'],['../classentt_1_1basic__runtime__view.html#af47b1aff2d44990f17c9740cf24a2670',1,'entt::basic_runtime_view::begin()'],['../classentt_1_1sparse__set.html#a06743336f265989b48e106a3d3bd1562',1,'entt::sparse_set::begin()'],['../classentt_1_1basic__storage.html#aecc4b13b67a7664c5c36596f2b927bed',1,'entt::basic_storage::begin() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ab963b76ebe297a1ad4a2c433aa55f2b5',1,'entt::basic_storage::begin() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a9676a3940e684f720bd2fc06128a4e2e',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::begin()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a2ec860ee4a88c8ff309b614070b98b15',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::begin()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a2b0108681a38c823de6a4ba49baa3957',1,'entt::basic_view< Entity, exclude_t<>, Component >::begin()']]], + ['bind_43',['bind',['../structentt_1_1meta__ctx.html#a43f914e2d2470e82b1e5415f60a4f803',1,'entt::meta_ctx']]] ]; diff --git a/search/all_10.html b/search/all_10.html index d1345a1f0..c234738ec 100644 --- a/search/all_10.html +++ b/search/all_10.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_10.js b/search/all_10.js index 6de50a91a..1953675e8 100644 --- a/search/all_10.js +++ b/search/all_10.js @@ -1,33 +1,33 @@ var searchData= [ - ['scheduler',['scheduler',['../classentt_1_1scheduler.html',1,'entt::scheduler< Delta >'],['../classentt_1_1scheduler.html#a7b06b3a881b89c9d3b9829ccf111fae4',1,'entt::scheduler::scheduler() ENTT_NOEXCEPT=default'],['../classentt_1_1scheduler.html#af582ffea72368a83ea4dd7d9e563f715',1,'entt::scheduler::scheduler(scheduler &&)=default']]], - ['scoped_5fconnection',['scoped_connection',['../structentt_1_1scoped__connection.html',1,'entt::scoped_connection'],['../structentt_1_1scoped__connection.html#a5675cd808dd54a6d9546037d282d3c6c',1,'entt::scoped_connection::scoped_connection()=default'],['../structentt_1_1scoped__connection.html#af9a6be81350091a9ee1c5418b7ca12ed',1,'entt::scoped_connection::scoped_connection(const connection &conn)'],['../structentt_1_1scoped__connection.html#ad52da49cdabbfe1a4aada361f48fb9be',1,'entt::scoped_connection::scoped_connection(const scoped_connection &)=delete'],['../structentt_1_1scoped__connection.html#abb53075d1cc80d885e961a47ca5dd064',1,'entt::scoped_connection::scoped_connection(scoped_connection &&)=default']]], - ['service_5flocator',['service_locator',['../structentt_1_1service__locator.html',1,'entt::service_locator< Service >'],['../structentt_1_1service__locator.html#a120cdb3eb1d820e5649f3d8bac8098d0',1,'entt::service_locator::service_locator()']]], - ['service_5ftype',['service_type',['../structentt_1_1service__locator.html#af34a883e56f32a98d7b8a5db87bdf504',1,'entt::service_locator']]], - ['set',['set',['../classentt_1_1basic__registry.html#a7d771eee6e8e573bf1b8e4e8501ea7f1',1,'entt::basic_registry::set()'],['../structentt_1_1service__locator.html#a116dc62f5d2a1c65db9d7528c957e91f',1,'entt::service_locator::set(Args &&... args)'],['../structentt_1_1service__locator.html#a86770e79d01ab5fb0dddffba0bf9a697',1,'entt::service_locator::set(std::shared_ptr< Service > ptr)'],['../structentt_1_1meta__data.html#a776f1d239c00cc96c683bbbd348119da',1,'entt::meta_data::set(meta_handle handle, Type &&value) const'],['../structentt_1_1meta__data.html#ae0a9924efdaedd5bec4ed37efa5e0671',1,'entt::meta_data::set(meta_handle handle, std::size_t index, Type &&value) const']]], - ['shrink',['shrink',['../classentt_1_1basic__continuous__loader.html#a01b949f4a5829bd5bf3738a7e0f776d2',1,'entt::basic_continuous_loader']]], - ['shrink_5fto_5ffit',['shrink_to_fit',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6cc71def601dfb3a1c224b74a5c91da5',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::shrink_to_fit()'],['../classentt_1_1basic__registry.html#a63aa387e557553d61483a58807cd785e',1,'entt::basic_registry::shrink_to_fit()'],['../classentt_1_1sparse__set.html#a75f5d70148a149e4cbc485c7a7b00dda',1,'entt::sparse_set::shrink_to_fit()'],['../classentt_1_1basic__storage.html#a208fc8c4400c12e41229345badd0bc99',1,'entt::basic_storage::shrink_to_fit()']]], - ['sigh',['sigh',['../classentt_1_1sigh.html',1,'entt']]], - ['sigh_3c_20ret_28args_2e_2e_2e_29_3e',['sigh< Ret(Args...)>',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html',1,'entt']]], - ['sigh_3c_20void_28const_20entity_2c_20entt_3a_3abasic_5fregistry_20_26_29_3e',['sigh< void(const Entity, entt::basic_registry &)>',['../classentt_1_1sigh.html',1,'entt']]], - ['sigh_3c_20void_28const_20entity_2c_20entt_3a_3abasic_5fregistry_20_26_2c_20reference_5ftype_29_3e',['sigh< void(const Entity, entt::basic_registry &, reference_type)>',['../classentt_1_1sigh.html',1,'entt']]], - ['sigh_3c_20void_28const_20event_20_26_29_3e',['sigh< void(const Event &)>',['../classentt_1_1sigh.html',1,'entt']]], - ['sink',['sink',['../classentt_1_1sink.html',1,'entt::sink< typename >'],['../classentt_1_1connection.html#afe2b37ace8306e708a0dc76c658a4b19',1,'entt::connection::sink()'],['../classentt_1_1dispatcher.html#afedd59083875621a11510b00c84c8878',1,'entt::dispatcher::sink()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a04540177a67694d12e9316ac0aef4e45',1,'entt::sink< Ret(Args...)>::sink()'],['../namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d',1,'entt::sink()']]], - ['sink_3c_20ret_28args_2e_2e_2e_29_3e',['sink< Ret(Args...)>',['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html',1,'entt::sink< Ret(Args...)>'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a64484123196b777083143032560bae7d',1,'entt::sigh< Ret(Args...)>::sink< Ret(Args...)>()']]], - ['sink_5ftype',['sink_type',['../classentt_1_1dispatcher.html#a9ab3b084146a292b2dd2411cea452273',1,'entt::dispatcher::sink_type()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#aa38cfb19329979f98307eff7a75cc2af',1,'entt::sigh< Ret(Args...)>::sink_type()']]], - ['size',['size',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a18fb71cb9621491caf569cf20c99fe3c',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ac8aabc32d123bfa0bc10db289aafff7a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ab1600321e1a656bb9cda64e7254821ac',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acf74917323f67e0b81b1253cc42308e9',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#ab42aeb1e1ffb32b98bc4da4f30755ec1',1,'entt::basic_observer::size()'],['../classentt_1_1basic__registry.html#abb5713726f7b5c4b67a0271a64bedd2f',1,'entt::basic_registry::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#afdfc12e1ffa6bac72c2de9af7e91f44e',1,'entt::basic_registry::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__runtime__view.html#a8a14205c30a77fae500ff244a8f9041e',1,'entt::basic_runtime_view::size()'],['../classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190',1,'entt::sparse_set::size()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#adfa9d55a6bebf3d6133048160f223506',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1006310c8f34441de27724157e78e220',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8648cc860a64d9adcfc261679b8a174e',1,'entt::basic_view< Entity, exclude_t<>, Component >::size()'],['../structentt_1_1meta__ctor.html#ad0ac4a64b630462768a3f12f6389b6e7',1,'entt::meta_ctor::size()'],['../structentt_1_1meta__func.html#ae4bc5f5e90003362872d8cd056b2f689',1,'entt::meta_func::size()'],['../classentt_1_1scheduler.html#ab0c473e6d4733bdb78f3dc26147de4ad',1,'entt::scheduler::size()'],['../structentt_1_1cache.html#afe769393054badd0f5839667a485b19d',1,'entt::cache::size()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#ab2f3ba2ab5c20816342f5dc43987ba93',1,'entt::sigh< Ret(Args...)>::size()']]], - ['size_5ftype',['size_type',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abdaf90d7a55b932927cfcb6a14cb3068',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a1c83478c5db4749a31a4fb638901a153',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size_type()'],['../classentt_1_1basic__observer.html#a147a0e35035fc3c19b67b31d66d2d80b',1,'entt::basic_observer::size_type()'],['../classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636',1,'entt::basic_registry::size_type()'],['../classentt_1_1basic__runtime__view.html#aabb4450ce3d686fe05bd92e5975d11fb',1,'entt::basic_runtime_view::size_type()'],['../classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1',1,'entt::sparse_set::size_type()'],['../classentt_1_1basic__storage.html#afffeca2fda54eebf889c2e4f447ab37b',1,'entt::basic_storage::size_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a1c6a84ddddca748a2de04c448179b9e5',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::size_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1e689febb974e9855dc2b033ae240643',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a6df04cc90dcce96291a88546aa287ca7',1,'entt::basic_view< Entity, exclude_t<>, Component >::size_type()'],['../structentt_1_1meta__ctor.html#a7a267e333222dab22e7a965137538f18',1,'entt::meta_ctor::size_type()'],['../structentt_1_1meta__func.html#a422ec572c7c56d3cb46d09704be64f65',1,'entt::meta_func::size_type()'],['../classentt_1_1meta__type.html#a7362687fc89444507cded22f57be3ff0',1,'entt::meta_type::size_type()'],['../classentt_1_1scheduler.html#afcec47d6ec28a994af2a7097348ce59f',1,'entt::scheduler::size_type()'],['../structentt_1_1cache.html#aee66d7039b665d6636be29c255065aa3',1,'entt::cache::size_type()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#aa1eb227b5cb5c4910dacccd38748a209',1,'entt::sigh< Ret(Args...)>::size_type()']]], - ['snapshot',['snapshot',['../classentt_1_1basic__registry.html#ad6ab9182dd41bc02ddfc0c3c8195a215',1,'entt::basic_registry::snapshot()'],['../namespaceentt.html#a80012f9fa628920a3507ae947704d447',1,'entt::snapshot()']]], - ['snapshot_5floader',['snapshot_loader',['../namespaceentt.html#ae7e50fc296c4ea68183db332950b99f5',1,'entt']]], - ['sort',['sort',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a75f3809337978fb02cb31b3155f00dbd',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::sort(Compare compare, Sort algo=Sort{}, Args &&... args)'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9970a9683d86e9cc664e01144803d598',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::sort() const'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a86ae2163fd9b2999ff2faba740a9af05',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::sort()'],['../classentt_1_1basic__registry.html#a38ac2a883e3d881c6ae5a05a0252b7ae',1,'entt::basic_registry::sort(Compare compare, Sort algo=Sort{}, Args &&... args)'],['../classentt_1_1basic__registry.html#a2907f89b80fb692b16727e5e67a91c5d',1,'entt::basic_registry::sort()'],['../classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828',1,'entt::sparse_set::sort()'],['../classentt_1_1basic__storage.html#ac9b5e700778b280a69bb13faff484756',1,'entt::basic_storage::sort()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ab5cf50d6f5a80810185ec39c4782f583',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::sort()']]], - ['sortable',['sortable',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a0ecc1d294fd7fcfc47c38110beb3b5b3',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::sortable()'],['../classentt_1_1basic__registry.html#aeda3c0666945065d160ed58905b07888',1,'entt::basic_registry::sortable()']]], - ['sparse_5fset',['sparse_set',['../classentt_1_1sparse__set.html',1,'entt::sparse_set< Entity >'],['../classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8',1,'entt::sparse_set::sparse_set()=default'],['../classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f',1,'entt::sparse_set::sparse_set(const sparse_set &other)'],['../classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf',1,'entt::sparse_set::sparse_set(sparse_set &&)=default']]], - ['sparse_5fset_3c_20entity_5ftype_20_3e',['sparse_set< entity_type >',['../classentt_1_1sparse__set.html',1,'entt']]], - ['std_5fsort',['std_sort',['../structentt_1_1std__sort.html',1,'entt']]], - ['stomp',['stomp',['../classentt_1_1basic__registry.html#a99434b531cbdf6e04be282c92d8d47b0',1,'entt::basic_registry::stomp(const entity_type dst, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#ae4518841df584574580f178dc0f3db39',1,'entt::basic_registry::stomp(It first, It last, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})']]], - ['storage',['storage',['../structentt_1_1storage.html',1,'entt']]], - ['storage_3c_20entity_2c_20component_20_3e',['storage< Entity, Component >',['../structentt_1_1storage.html',1,'entt']]], - ['storage_3c_20entity_5ftype_2c_20payload_5ftype_20_3e',['storage< entity_type, payload_type >',['../structentt_1_1storage.html',1,'entt']]], - ['succeed',['succeed',['../classentt_1_1process.html#a43d63ba9304654f0209fc32d2c74f4ce',1,'entt::process']]], - ['swap',['swap',['../classentt_1_1sparse__set.html#a5ef14da059528647a5d72f2e2ce0d762',1,'entt::sparse_set::swap()'],['../classentt_1_1basic__storage.html#a35f98e0151152bbf10fd1666f4bcf00b',1,'entt::basic_storage::swap()'],['../classentt_1_1meta__any.html#a4dd041d6003f5977b94ad8a0853c136b',1,'entt::meta_any::swap()']]] + ['scheduler_247',['scheduler',['../classentt_1_1scheduler.html',1,'entt::scheduler< Delta >'],['../classentt_1_1scheduler.html#a7b06b3a881b89c9d3b9829ccf111fae4',1,'entt::scheduler::scheduler() ENTT_NOEXCEPT=default'],['../classentt_1_1scheduler.html#af582ffea72368a83ea4dd7d9e563f715',1,'entt::scheduler::scheduler(scheduler &&)=default']]], + ['scoped_5fconnection_248',['scoped_connection',['../structentt_1_1scoped__connection.html',1,'entt::scoped_connection'],['../structentt_1_1scoped__connection.html#a5675cd808dd54a6d9546037d282d3c6c',1,'entt::scoped_connection::scoped_connection()=default'],['../structentt_1_1scoped__connection.html#af9a6be81350091a9ee1c5418b7ca12ed',1,'entt::scoped_connection::scoped_connection(const connection &conn)'],['../structentt_1_1scoped__connection.html#ad52da49cdabbfe1a4aada361f48fb9be',1,'entt::scoped_connection::scoped_connection(const scoped_connection &)=delete'],['../structentt_1_1scoped__connection.html#abb53075d1cc80d885e961a47ca5dd064',1,'entt::scoped_connection::scoped_connection(scoped_connection &&)=default']]], + ['service_5flocator_249',['service_locator',['../structentt_1_1service__locator.html',1,'entt::service_locator< Service >'],['../structentt_1_1service__locator.html#a120cdb3eb1d820e5649f3d8bac8098d0',1,'entt::service_locator::service_locator()']]], + ['service_5ftype_250',['service_type',['../structentt_1_1service__locator.html#af34a883e56f32a98d7b8a5db87bdf504',1,'entt::service_locator']]], + ['set_251',['set',['../classentt_1_1basic__registry.html#a7d771eee6e8e573bf1b8e4e8501ea7f1',1,'entt::basic_registry::set()'],['../structentt_1_1service__locator.html#a116dc62f5d2a1c65db9d7528c957e91f',1,'entt::service_locator::set(Args &&... args)'],['../structentt_1_1service__locator.html#a86770e79d01ab5fb0dddffba0bf9a697',1,'entt::service_locator::set(std::shared_ptr< Service > ptr)'],['../structentt_1_1meta__data.html#a776f1d239c00cc96c683bbbd348119da',1,'entt::meta_data::set(meta_handle handle, Type &&value) const'],['../structentt_1_1meta__data.html#ae0a9924efdaedd5bec4ed37efa5e0671',1,'entt::meta_data::set(meta_handle handle, std::size_t index, Type &&value) const']]], + ['shrink_252',['shrink',['../classentt_1_1basic__continuous__loader.html#a01b949f4a5829bd5bf3738a7e0f776d2',1,'entt::basic_continuous_loader']]], + ['shrink_5fto_5ffit_253',['shrink_to_fit',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6cc71def601dfb3a1c224b74a5c91da5',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::shrink_to_fit()'],['../classentt_1_1basic__registry.html#a63aa387e557553d61483a58807cd785e',1,'entt::basic_registry::shrink_to_fit()'],['../classentt_1_1sparse__set.html#a75f5d70148a149e4cbc485c7a7b00dda',1,'entt::sparse_set::shrink_to_fit()'],['../classentt_1_1basic__storage.html#a208fc8c4400c12e41229345badd0bc99',1,'entt::basic_storage::shrink_to_fit()']]], + ['sigh_254',['sigh',['../classentt_1_1sigh.html',1,'entt']]], + ['sigh_3c_20ret_28args_2e_2e_2e_29_3e_255',['sigh< Ret(Args...)>',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html',1,'entt']]], + ['sigh_3c_20void_28const_20entity_2c_20entt_3a_3abasic_5fregistry_20_26_29_3e_256',['sigh< void(const Entity, entt::basic_registry &)>',['../classentt_1_1sigh.html',1,'entt']]], + ['sigh_3c_20void_28const_20entity_2c_20entt_3a_3abasic_5fregistry_20_26_2c_20reference_5ftype_29_3e_257',['sigh< void(const Entity, entt::basic_registry &, reference_type)>',['../classentt_1_1sigh.html',1,'entt']]], + ['sigh_3c_20void_28const_20event_20_26_29_3e_258',['sigh< void(const Event &)>',['../classentt_1_1sigh.html',1,'entt']]], + ['sink_259',['sink',['../classentt_1_1sink.html',1,'entt::sink< typename >'],['../classentt_1_1connection.html#afe2b37ace8306e708a0dc76c658a4b19',1,'entt::connection::sink()'],['../classentt_1_1dispatcher.html#afedd59083875621a11510b00c84c8878',1,'entt::dispatcher::sink()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a04540177a67694d12e9316ac0aef4e45',1,'entt::sink< Ret(Args...)>::sink()'],['../namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d',1,'entt::sink()']]], + ['sink_3c_20ret_28args_2e_2e_2e_29_3e_260',['sink< Ret(Args...)>',['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html',1,'entt::sink< Ret(Args...)>'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a64484123196b777083143032560bae7d',1,'entt::sigh< Ret(Args...)>::sink< Ret(Args...)>()']]], + ['sink_5ftype_261',['sink_type',['../classentt_1_1dispatcher.html#a9ab3b084146a292b2dd2411cea452273',1,'entt::dispatcher::sink_type()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#aa38cfb19329979f98307eff7a75cc2af',1,'entt::sigh< Ret(Args...)>::sink_type()']]], + ['size_262',['size',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a18fb71cb9621491caf569cf20c99fe3c',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ac8aabc32d123bfa0bc10db289aafff7a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ab1600321e1a656bb9cda64e7254821ac',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acf74917323f67e0b81b1253cc42308e9',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#ab42aeb1e1ffb32b98bc4da4f30755ec1',1,'entt::basic_observer::size()'],['../classentt_1_1basic__registry.html#abb5713726f7b5c4b67a0271a64bedd2f',1,'entt::basic_registry::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#afdfc12e1ffa6bac72c2de9af7e91f44e',1,'entt::basic_registry::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__runtime__view.html#a8a14205c30a77fae500ff244a8f9041e',1,'entt::basic_runtime_view::size()'],['../classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190',1,'entt::sparse_set::size()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#adfa9d55a6bebf3d6133048160f223506',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1006310c8f34441de27724157e78e220',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8648cc860a64d9adcfc261679b8a174e',1,'entt::basic_view< Entity, exclude_t<>, Component >::size()'],['../structentt_1_1meta__ctor.html#ad0ac4a64b630462768a3f12f6389b6e7',1,'entt::meta_ctor::size()'],['../structentt_1_1meta__func.html#ae4bc5f5e90003362872d8cd056b2f689',1,'entt::meta_func::size()'],['../classentt_1_1scheduler.html#ab0c473e6d4733bdb78f3dc26147de4ad',1,'entt::scheduler::size()'],['../structentt_1_1cache.html#afe769393054badd0f5839667a485b19d',1,'entt::cache::size()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#ab2f3ba2ab5c20816342f5dc43987ba93',1,'entt::sigh< Ret(Args...)>::size()']]], + ['size_5ftype_263',['size_type',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abdaf90d7a55b932927cfcb6a14cb3068',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a1c83478c5db4749a31a4fb638901a153',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size_type()'],['../classentt_1_1basic__observer.html#a147a0e35035fc3c19b67b31d66d2d80b',1,'entt::basic_observer::size_type()'],['../classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636',1,'entt::basic_registry::size_type()'],['../classentt_1_1basic__runtime__view.html#aabb4450ce3d686fe05bd92e5975d11fb',1,'entt::basic_runtime_view::size_type()'],['../classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1',1,'entt::sparse_set::size_type()'],['../classentt_1_1basic__storage.html#afffeca2fda54eebf889c2e4f447ab37b',1,'entt::basic_storage::size_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a1c6a84ddddca748a2de04c448179b9e5',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::size_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1e689febb974e9855dc2b033ae240643',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a6df04cc90dcce96291a88546aa287ca7',1,'entt::basic_view< Entity, exclude_t<>, Component >::size_type()'],['../structentt_1_1meta__ctor.html#a7a267e333222dab22e7a965137538f18',1,'entt::meta_ctor::size_type()'],['../structentt_1_1meta__func.html#a422ec572c7c56d3cb46d09704be64f65',1,'entt::meta_func::size_type()'],['../classentt_1_1meta__type.html#a7362687fc89444507cded22f57be3ff0',1,'entt::meta_type::size_type()'],['../classentt_1_1scheduler.html#afcec47d6ec28a994af2a7097348ce59f',1,'entt::scheduler::size_type()'],['../structentt_1_1cache.html#aee66d7039b665d6636be29c255065aa3',1,'entt::cache::size_type()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#aa1eb227b5cb5c4910dacccd38748a209',1,'entt::sigh< Ret(Args...)>::size_type()']]], + ['snapshot_264',['snapshot',['../classentt_1_1basic__registry.html#ad6ab9182dd41bc02ddfc0c3c8195a215',1,'entt::basic_registry::snapshot()'],['../namespaceentt.html#a80012f9fa628920a3507ae947704d447',1,'entt::snapshot()']]], + ['snapshot_5floader_265',['snapshot_loader',['../namespaceentt.html#ae7e50fc296c4ea68183db332950b99f5',1,'entt']]], + ['sort_266',['sort',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a75f3809337978fb02cb31b3155f00dbd',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::sort(Compare compare, Sort algo=Sort{}, Args &&... args)'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9970a9683d86e9cc664e01144803d598',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::sort() const'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a86ae2163fd9b2999ff2faba740a9af05',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::sort()'],['../classentt_1_1basic__registry.html#a38ac2a883e3d881c6ae5a05a0252b7ae',1,'entt::basic_registry::sort(Compare compare, Sort algo=Sort{}, Args &&... args)'],['../classentt_1_1basic__registry.html#a2907f89b80fb692b16727e5e67a91c5d',1,'entt::basic_registry::sort()'],['../classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828',1,'entt::sparse_set::sort()'],['../classentt_1_1basic__storage.html#ac9b5e700778b280a69bb13faff484756',1,'entt::basic_storage::sort()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ab5cf50d6f5a80810185ec39c4782f583',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::sort()']]], + ['sortable_267',['sortable',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a0ecc1d294fd7fcfc47c38110beb3b5b3',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::sortable()'],['../classentt_1_1basic__registry.html#aeda3c0666945065d160ed58905b07888',1,'entt::basic_registry::sortable()']]], + ['sparse_5fset_268',['sparse_set',['../classentt_1_1sparse__set.html',1,'entt::sparse_set< Entity >'],['../classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8',1,'entt::sparse_set::sparse_set()=default'],['../classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f',1,'entt::sparse_set::sparse_set(const sparse_set &other)'],['../classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf',1,'entt::sparse_set::sparse_set(sparse_set &&)=default']]], + ['sparse_5fset_3c_20entity_5ftype_20_3e_269',['sparse_set< entity_type >',['../classentt_1_1sparse__set.html',1,'entt']]], + ['std_5fsort_270',['std_sort',['../structentt_1_1std__sort.html',1,'entt']]], + ['stomp_271',['stomp',['../classentt_1_1basic__registry.html#a99434b531cbdf6e04be282c92d8d47b0',1,'entt::basic_registry::stomp(const entity_type dst, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#ae4518841df584574580f178dc0f3db39',1,'entt::basic_registry::stomp(It first, It last, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})']]], + ['storage_272',['storage',['../structentt_1_1storage.html',1,'entt']]], + ['storage_3c_20entity_2c_20component_20_3e_273',['storage< Entity, Component >',['../structentt_1_1storage.html',1,'entt']]], + ['storage_3c_20entity_5ftype_2c_20payload_5ftype_20_3e_274',['storage< entity_type, payload_type >',['../structentt_1_1storage.html',1,'entt']]], + ['succeed_275',['succeed',['../classentt_1_1process.html#a43d63ba9304654f0209fc32d2c74f4ce',1,'entt::process']]], + ['swap_276',['swap',['../classentt_1_1sparse__set.html#a5ef14da059528647a5d72f2e2ce0d762',1,'entt::sparse_set::swap()'],['../classentt_1_1basic__storage.html#a35f98e0151152bbf10fd1666f4bcf00b',1,'entt::basic_storage::swap()'],['../classentt_1_1meta__any.html#a4dd041d6003f5977b94ad8a0853c136b',1,'entt::meta_any::swap()']]] ]; diff --git a/search/all_11.html b/search/all_11.html index 2be8b7111..2f927fe5f 100644 --- a/search/all_11.html +++ b/search/all_11.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_11.js b/search/all_11.js index 60f458144..c9436edc8 100644 --- a/search/all_11.js +++ b/search/all_11.js @@ -1,26 +1,26 @@ var searchData= [ - ['tag',['tag',['../namespaceentt.html#a4f264daab30d8e01b88536aa43fe0c28',1,'entt']]], - ['temp',['temp',['../structentt_1_1cache.html#a3083170fdfa3f865931f9222d897d783',1,'entt::cache']]], - ['tick',['tick',['../classentt_1_1process.html#aacc7fe0ef3265113079c70ff8cd9478d',1,'entt::process']]], - ['to_5fvalue',['to_value',['../classentt_1_1basic__hashed__string.html#aa23b06fa1dbca8f703a2251c5191c200',1,'entt::basic_hashed_string::to_value(const value_type(&str)[N]) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#a750c547ce546aaee2f532db7020f3361',1,'entt::basic_hashed_string::to_value(const_wrapper wrapper) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#aa4f3066c3753c41634c1f198f4fe6512',1,'entt::basic_hashed_string::to_value(const value_type *str, std::size_t size) ENTT_NOEXCEPT']]], - ['trigger',['trigger',['../classentt_1_1dispatcher.html#ac3d3eae7004c63f0232b09f2770c4ebd',1,'entt::dispatcher::trigger(Args &&... args)'],['../classentt_1_1dispatcher.html#a1d14234071d22c9fe09c453ebd818d2e',1,'entt::dispatcher::trigger(Event &&event)']]], - ['try_5fcast',['try_cast',['../classentt_1_1meta__any.html#a20d96950feab3d20d7c7fe1a5b7325bd',1,'entt::meta_any::try_cast() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#ab3513197f840c5c1e23e7895a796f27a',1,'entt::meta_any::try_cast() ENTT_NOEXCEPT']]], - ['try_5fctx',['try_ctx',['../classentt_1_1basic__registry.html#a33650f5792414c71ef00c3bcaca3f1d5',1,'entt::basic_registry::try_ctx() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a4182d11d18ec7873562c2842a332ac89',1,'entt::basic_registry::try_ctx() ENTT_NOEXCEPT']]], - ['try_5fget',['try_get',['../structentt_1_1basic__actor.html#ac37259d66c0a8f42b7e744567382c6c2',1,'entt::basic_actor::try_get() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a0320585b864c700d980212f37654a8a1',1,'entt::basic_actor::try_get() ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a25c4412448ddcbfe1290f72498ae7809',1,'entt::basic_registry::try_get([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a2c3ba909a2f845601a5b873c6bdd8371',1,'entt::basic_registry::try_get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#aab7da23b603d6cc78e67b3509ad979fa',1,'entt::basic_storage::try_get(const entity_type entt) const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a8ff9d6ef48840c8ad88f8c0b8b5dcd35',1,'entt::basic_storage::try_get(const entity_type entt) ENTT_NOEXCEPT']]], - ['type',['type',['../structentt_1_1type__list__cat_3_4.html#a957e88d5bc4c1cbf4a13fbddbe2e176f',1,'entt::type_list_cat<>::type()'],['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_00_01type__list_3_01Other_8_8_8_01_4_00_01List_8_8_8_01_4.html#ae17db475954ad06eba24fd1eedba5f8b',1,'entt::type_list_cat< type_list< Type... >, type_list< Other... >, List... >::type()'],['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_01_4.html#a0c40287fad9d80f0532d80bf48f219ed',1,'entt::type_list_cat< type_list< Type... > >::type()'],['../structentt_1_1type__list__unique_3_01type__list_3_01Type_00_01Other_8_8_8_01_4_01_4.html#a378823486aa4e4f288b1d73b2703c485',1,'entt::type_list_unique< type_list< Type, Other... > >::type()'],['../structentt_1_1type__list__unique_3_01type__list_3_4_01_4.html#a48245981f9818ca2601b9815cbfa5b79',1,'entt::type_list_unique< type_list<> >::type()'],['../classentt_1_1family.html#ad2c16ecd854f12f1aa70ceaba094e43a',1,'entt::family::type()'],['../classentt_1_1identifier.html#adb3aad553b8d57ef94581af39fc53178',1,'entt::identifier::type()'],['../classentt_1_1basic__registry.html#a478113cca30db07fa56a557d535e09c1',1,'entt::basic_registry::type()'],['../classentt_1_1meta__factory.html#a6f49abe1b22384def9bc19871a4c5eb2',1,'entt::meta_factory::type(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#a0426faf1bcf4ad72d541023837a127e0',1,'entt::meta_factory::type() ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a406ea303f140056a30103d90afab2737',1,'entt::meta_any::type()'],['../classentt_1_1meta__handle.html#aa8f78e22bdf61554c38f27575fd8cf33',1,'entt::meta_handle::type()'],['../structentt_1_1meta__base.html#a5e9f69b43cdc90add110654acde5e8b6',1,'entt::meta_base::type()'],['../structentt_1_1meta__conv.html#accdedbb8b1636f59967dc30ba5d7e753',1,'entt::meta_conv::type()'],['../structentt_1_1meta__data.html#a4d99cf1fb67d2bea840fa608dc95e64f',1,'entt::meta_data::type()']]], - ['type_5flist',['type_list',['../structentt_1_1type__list.html',1,'entt']]], - ['type_5flist_3c_20type_2e_2e_2e_20_3e',['type_list< Type... >',['../structentt_1_1type__list.html',1,'entt']]], - ['type_5flist_5fcat',['type_list_cat',['../structentt_1_1type__list__cat.html',1,'entt']]], - ['type_5flist_5fcat_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_20_3e',['type_list_cat< type_list< Type... > >',['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_01_4.html',1,'entt']]], - ['type_5flist_5fcat_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_2c_20type_5flist_3c_20other_2e_2e_2e_20_3e_2c_20list_2e_2e_2e_20_3e',['type_list_cat< type_list< Type... >, type_list< Other... >, List... >',['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_00_01type__list_3_01Other_8_8_8_01_4_00_01List_8_8_8_01_4.html',1,'entt']]], - ['type_5flist_5fcat_3c_3e',['type_list_cat<>',['../structentt_1_1type__list__cat_3_4.html',1,'entt']]], - ['type_5flist_5fcat_5ft',['type_list_cat_t',['../namespaceentt.html#a546467a3662e9a915d5d519ad565e801',1,'entt']]], - ['type_5flist_5fsize',['type_list_size',['../structentt_1_1type__list__size.html',1,'entt']]], - ['type_5flist_5fsize_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_20_3e',['type_list_size< type_list< Type... > >',['../structentt_1_1type__list__size_3_01type__list_3_01Type_8_8_8_01_4_01_4.html',1,'entt']]], - ['type_5flist_5fsize_5fv',['type_list_size_v',['../namespaceentt.html#a6a9c0b65bfb15bb63c8389391be28eb5',1,'entt']]], - ['type_5flist_5funique',['type_list_unique',['../structentt_1_1type__list__unique.html',1,'entt']]], - ['type_5flist_5funique_3c_20type_5flist_3c_20type_2c_20other_2e_2e_2e_20_3e_20_3e',['type_list_unique< type_list< Type, Other... > >',['../structentt_1_1type__list__unique_3_01type__list_3_01Type_00_01Other_8_8_8_01_4_01_4.html',1,'entt']]], - ['type_5flist_5funique_3c_20type_5flist_3c_3e_20_3e',['type_list_unique< type_list<> >',['../structentt_1_1type__list__unique_3_01type__list_3_4_01_4.html',1,'entt']]], - ['type_5flist_5funique_5ft',['type_list_unique_t',['../namespaceentt.html#a75a277a6037279d65cd3874b46ec7166',1,'entt']]] + ['tag_277',['tag',['../namespaceentt.html#a4f264daab30d8e01b88536aa43fe0c28',1,'entt']]], + ['temp_278',['temp',['../structentt_1_1cache.html#a3083170fdfa3f865931f9222d897d783',1,'entt::cache']]], + ['tick_279',['tick',['../classentt_1_1process.html#aacc7fe0ef3265113079c70ff8cd9478d',1,'entt::process']]], + ['to_5fvalue_280',['to_value',['../classentt_1_1basic__hashed__string.html#aa23b06fa1dbca8f703a2251c5191c200',1,'entt::basic_hashed_string::to_value(const value_type(&str)[N]) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#a750c547ce546aaee2f532db7020f3361',1,'entt::basic_hashed_string::to_value(const_wrapper wrapper) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#aa4f3066c3753c41634c1f198f4fe6512',1,'entt::basic_hashed_string::to_value(const value_type *str, std::size_t size) ENTT_NOEXCEPT']]], + ['trigger_281',['trigger',['../classentt_1_1dispatcher.html#ac3d3eae7004c63f0232b09f2770c4ebd',1,'entt::dispatcher::trigger(Args &&... args)'],['../classentt_1_1dispatcher.html#a1d14234071d22c9fe09c453ebd818d2e',1,'entt::dispatcher::trigger(Event &&event)']]], + ['try_5fcast_282',['try_cast',['../classentt_1_1meta__any.html#a20d96950feab3d20d7c7fe1a5b7325bd',1,'entt::meta_any::try_cast() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#ab3513197f840c5c1e23e7895a796f27a',1,'entt::meta_any::try_cast() ENTT_NOEXCEPT']]], + ['try_5fctx_283',['try_ctx',['../classentt_1_1basic__registry.html#a33650f5792414c71ef00c3bcaca3f1d5',1,'entt::basic_registry::try_ctx() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a4182d11d18ec7873562c2842a332ac89',1,'entt::basic_registry::try_ctx() ENTT_NOEXCEPT']]], + ['try_5fget_284',['try_get',['../structentt_1_1basic__actor.html#ac37259d66c0a8f42b7e744567382c6c2',1,'entt::basic_actor::try_get() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a0320585b864c700d980212f37654a8a1',1,'entt::basic_actor::try_get() ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a25c4412448ddcbfe1290f72498ae7809',1,'entt::basic_registry::try_get([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a2c3ba909a2f845601a5b873c6bdd8371',1,'entt::basic_registry::try_get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#aab7da23b603d6cc78e67b3509ad979fa',1,'entt::basic_storage::try_get(const entity_type entt) const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a8ff9d6ef48840c8ad88f8c0b8b5dcd35',1,'entt::basic_storage::try_get(const entity_type entt) ENTT_NOEXCEPT']]], + ['type_285',['type',['../structentt_1_1type__list__cat_3_4.html#a957e88d5bc4c1cbf4a13fbddbe2e176f',1,'entt::type_list_cat<>::type()'],['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_00_01type__list_3_01Other_8_8_8_01_4_00_01List_8_8_8_01_4.html#ae17db475954ad06eba24fd1eedba5f8b',1,'entt::type_list_cat< type_list< Type... >, type_list< Other... >, List... >::type()'],['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_01_4.html#a0c40287fad9d80f0532d80bf48f219ed',1,'entt::type_list_cat< type_list< Type... > >::type()'],['../structentt_1_1type__list__unique_3_01type__list_3_01Type_00_01Other_8_8_8_01_4_01_4.html#a378823486aa4e4f288b1d73b2703c485',1,'entt::type_list_unique< type_list< Type, Other... > >::type()'],['../structentt_1_1type__list__unique_3_01type__list_3_4_01_4.html#a48245981f9818ca2601b9815cbfa5b79',1,'entt::type_list_unique< type_list<> >::type()'],['../classentt_1_1family.html#ad2c16ecd854f12f1aa70ceaba094e43a',1,'entt::family::type()'],['../classentt_1_1identifier.html#adb3aad553b8d57ef94581af39fc53178',1,'entt::identifier::type()'],['../classentt_1_1basic__registry.html#a478113cca30db07fa56a557d535e09c1',1,'entt::basic_registry::type()'],['../classentt_1_1meta__factory.html#a6f49abe1b22384def9bc19871a4c5eb2',1,'entt::meta_factory::type(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#a0426faf1bcf4ad72d541023837a127e0',1,'entt::meta_factory::type() ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a406ea303f140056a30103d90afab2737',1,'entt::meta_any::type()'],['../classentt_1_1meta__handle.html#aa8f78e22bdf61554c38f27575fd8cf33',1,'entt::meta_handle::type()'],['../structentt_1_1meta__base.html#a5e9f69b43cdc90add110654acde5e8b6',1,'entt::meta_base::type()'],['../structentt_1_1meta__conv.html#accdedbb8b1636f59967dc30ba5d7e753',1,'entt::meta_conv::type()'],['../structentt_1_1meta__data.html#a4d99cf1fb67d2bea840fa608dc95e64f',1,'entt::meta_data::type()']]], + ['type_5flist_286',['type_list',['../structentt_1_1type__list.html',1,'entt']]], + ['type_5flist_3c_20type_2e_2e_2e_20_3e_287',['type_list< Type... >',['../structentt_1_1type__list.html',1,'entt']]], + ['type_5flist_5fcat_288',['type_list_cat',['../structentt_1_1type__list__cat.html',1,'entt']]], + ['type_5flist_5fcat_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_20_3e_289',['type_list_cat< type_list< Type... > >',['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_01_4.html',1,'entt']]], + ['type_5flist_5fcat_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_2c_20type_5flist_3c_20other_2e_2e_2e_20_3e_2c_20list_2e_2e_2e_20_3e_290',['type_list_cat< type_list< Type... >, type_list< Other... >, List... >',['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_00_01type__list_3_01Other_8_8_8_01_4_00_01List_8_8_8_01_4.html',1,'entt']]], + ['type_5flist_5fcat_3c_3e_291',['type_list_cat<>',['../structentt_1_1type__list__cat_3_4.html',1,'entt']]], + ['type_5flist_5fcat_5ft_292',['type_list_cat_t',['../namespaceentt.html#a546467a3662e9a915d5d519ad565e801',1,'entt']]], + ['type_5flist_5fsize_293',['type_list_size',['../structentt_1_1type__list__size.html',1,'entt']]], + ['type_5flist_5fsize_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_20_3e_294',['type_list_size< type_list< Type... > >',['../structentt_1_1type__list__size_3_01type__list_3_01Type_8_8_8_01_4_01_4.html',1,'entt']]], + ['type_5flist_5fsize_5fv_295',['type_list_size_v',['../namespaceentt.html#a6a9c0b65bfb15bb63c8389391be28eb5',1,'entt']]], + ['type_5flist_5funique_296',['type_list_unique',['../structentt_1_1type__list__unique.html',1,'entt']]], + ['type_5flist_5funique_3c_20type_5flist_3c_20type_2c_20other_2e_2e_2e_20_3e_20_3e_297',['type_list_unique< type_list< Type, Other... > >',['../structentt_1_1type__list__unique_3_01type__list_3_01Type_00_01Other_8_8_8_01_4_01_4.html',1,'entt']]], + ['type_5flist_5funique_3c_20type_5flist_3c_3e_20_3e_298',['type_list_unique< type_list<> >',['../structentt_1_1type__list__unique_3_01type__list_3_4_01_4.html',1,'entt']]], + ['type_5flist_5funique_5ft_299',['type_list_unique_t',['../namespaceentt.html#a75a277a6037279d65cd3874b46ec7166',1,'entt']]] ]; diff --git a/search/all_12.html b/search/all_12.html index 13c526372..6b0988c92 100644 --- a/search/all_12.html +++ b/search/all_12.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_12.js b/search/all_12.js index 56f7eed9f..0de82e7f2 100644 --- a/search/all_12.js +++ b/search/all_12.js @@ -1,6 +1,6 @@ var searchData= [ - ['unpause',['unpause',['../classentt_1_1process.html#a91fd8adb2ea48c88c6f9fb5818890f67',1,'entt::process']]], - ['unset',['unset',['../classentt_1_1basic__registry.html#aaa23b74e76b1749bb510a86e9d31b9cd',1,'entt::basic_registry']]], - ['update',['update',['../structentt_1_1process__adaptor.html#a7514fabbbda491742872bc0e52dde5c2',1,'entt::process_adaptor::update()'],['../classentt_1_1scheduler.html#a827eae426378df9ed9190752156a4154',1,'entt::scheduler::update()'],['../classentt_1_1dispatcher.html#aabed6fd7fa4027dcfa3afc7bc20f2784',1,'entt::dispatcher::update()'],['../classentt_1_1dispatcher.html#ae15c11634047d7718db5e2e30675c80c',1,'entt::dispatcher::update() const']]] + ['unpause_300',['unpause',['../classentt_1_1process.html#a91fd8adb2ea48c88c6f9fb5818890f67',1,'entt::process']]], + ['unset_301',['unset',['../classentt_1_1basic__registry.html#aaa23b74e76b1749bb510a86e9d31b9cd',1,'entt::basic_registry']]], + ['update_302',['update',['../structentt_1_1process__adaptor.html#a7514fabbbda491742872bc0e52dde5c2',1,'entt::process_adaptor::update()'],['../classentt_1_1scheduler.html#a827eae426378df9ed9190752156a4154',1,'entt::scheduler::update()'],['../classentt_1_1dispatcher.html#aabed6fd7fa4027dcfa3afc7bc20f2784',1,'entt::dispatcher::update()'],['../classentt_1_1dispatcher.html#ae15c11634047d7718db5e2e30675c80c',1,'entt::dispatcher::update() const']]] ]; diff --git a/search/all_13.html b/search/all_13.html index b4a8bca69..7e5f42a98 100644 --- a/search/all_13.html +++ b/search/all_13.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_13.js b/search/all_13.js index 0b7a538bb..e5ae14040 100644 --- a/search/all_13.js +++ b/search/all_13.js @@ -1,10 +1,10 @@ var searchData= [ - ['valid',['valid',['../classentt_1_1basic__registry.html#ac7d145b7adb8ca486c49cfd44aebea73',1,'entt::basic_registry']]], - ['value',['value',['../classentt_1_1basic__hashed__string.html#afb3a92282e81fb50af66953f39671f3c',1,'entt::basic_hashed_string::value()'],['../structentt_1_1meta__prop.html#a38a979e40971692929b46f80c3f22f9e',1,'entt::meta_prop::value()']]], - ['value_5ftype',['value_type',['../classentt_1_1basic__hashed__string.html#ad4e8f181e92b9218747ac43fe24c4cbc',1,'entt::basic_hashed_string']]], - ['version',['version',['../classentt_1_1basic__registry.html#a75f09d82b0cd6305ea7422d60162704e',1,'entt::basic_registry']]], - ['version_5fmask',['version_mask',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a83bda73c5a360f5ba8f653d0f888993b',1,'entt::entt_traits< std::uint16_t >::version_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a6ada978f907780643740d9ca2a8e8762',1,'entt::entt_traits< std::uint32_t >::version_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a3f9f70e677d638708d0ce72ce1a28c92',1,'entt::entt_traits< std::uint64_t >::version_mask()']]], - ['version_5ftype',['version_type',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#ab37d10c3be3d59159a63c0bd1e9e2924',1,'entt::entt_traits< std::uint16_t >::version_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#aee59dc7455ea0be015e699c3e46a22d1',1,'entt::entt_traits< std::uint32_t >::version_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#aeac4d9172940a9dec0682860ac176725',1,'entt::entt_traits< std::uint64_t >::version_type()'],['../classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6',1,'entt::basic_registry::version_type()']]], - ['view',['view',['../classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b',1,'entt::basic_registry::view(exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#aedb9b044141a3f700a1e547def00b768',1,'entt::basic_registry::view(exclude_t< Exclude... >={}) const'],['../namespaceentt.html#af2118c00dea16193aee017d1408beb53',1,'entt::view()']]] + ['valid_303',['valid',['../classentt_1_1basic__registry.html#ac7d145b7adb8ca486c49cfd44aebea73',1,'entt::basic_registry']]], + ['value_304',['value',['../classentt_1_1basic__hashed__string.html#afb3a92282e81fb50af66953f39671f3c',1,'entt::basic_hashed_string::value()'],['../structentt_1_1meta__prop.html#a38a979e40971692929b46f80c3f22f9e',1,'entt::meta_prop::value()']]], + ['value_5ftype_305',['value_type',['../classentt_1_1basic__hashed__string.html#ad4e8f181e92b9218747ac43fe24c4cbc',1,'entt::basic_hashed_string']]], + ['version_306',['version',['../classentt_1_1basic__registry.html#a75f09d82b0cd6305ea7422d60162704e',1,'entt::basic_registry']]], + ['version_5fmask_307',['version_mask',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a83bda73c5a360f5ba8f653d0f888993b',1,'entt::entt_traits< std::uint16_t >::version_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a6ada978f907780643740d9ca2a8e8762',1,'entt::entt_traits< std::uint32_t >::version_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a3f9f70e677d638708d0ce72ce1a28c92',1,'entt::entt_traits< std::uint64_t >::version_mask()']]], + ['version_5ftype_308',['version_type',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#ab37d10c3be3d59159a63c0bd1e9e2924',1,'entt::entt_traits< std::uint16_t >::version_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#aee59dc7455ea0be015e699c3e46a22d1',1,'entt::entt_traits< std::uint32_t >::version_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#aeac4d9172940a9dec0682860ac176725',1,'entt::entt_traits< std::uint64_t >::version_type()'],['../classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6',1,'entt::basic_registry::version_type()']]], + ['view_309',['view',['../classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b',1,'entt::basic_registry::view(exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#aedb9b044141a3f700a1e547def00b768',1,'entt::basic_registry::view(exclude_t< Exclude... >={}) const'],['../namespaceentt.html#af2118c00dea16193aee017d1408beb53',1,'entt::view()']]] ]; diff --git a/search/all_14.html b/search/all_14.html index fb4d0ecc7..ec7711ee8 100644 --- a/search/all_14.html +++ b/search/all_14.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_14.js b/search/all_14.js index 15b91062a..2ce986b5b 100644 --- a/search/all_14.js +++ b/search/all_14.js @@ -1,4 +1,4 @@ var searchData= [ - ['where',['where',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#a96d7a22588a9f1f67ba805de1f027433',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >']]] + ['where_310',['where',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#a96d7a22588a9f1f67ba805de1f027433',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >']]] ]; diff --git a/search/all_15.html b/search/all_15.html index 8afe9a033..2409e3c29 100644 --- a/search/all_15.html +++ b/search/all_15.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_15.js b/search/all_15.js index 67a76c211..5eebcc6b2 100644 --- a/search/all_15.js +++ b/search/all_15.js @@ -1,4 +1,4 @@ var searchData= [ - ['y_5fcombinator',['y_combinator',['../structentt_1_1y__combinator.html',1,'entt::y_combinator< Func >'],['../structentt_1_1y__combinator.html#a3ef9b5550c3de06bed6297ae3b79815f',1,'entt::y_combinator::y_combinator()']]] + ['y_5fcombinator_311',['y_combinator',['../structentt_1_1y__combinator.html',1,'entt::y_combinator< Func >'],['../structentt_1_1y__combinator.html#a3ef9b5550c3de06bed6297ae3b79815f',1,'entt::y_combinator::y_combinator()']]] ]; diff --git a/search/all_16.html b/search/all_16.html index e511edbc1..37b68745e 100644 --- a/search/all_16.html +++ b/search/all_16.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_16.js b/search/all_16.js index 1262abc36..a38d663b9 100644 --- a/search/all_16.js +++ b/search/all_16.js @@ -1,11 +1,11 @@ var searchData= [ - ['_7ebasic_5factor',['~basic_actor',['../structentt_1_1basic__actor.html#a46dc913885c448e059e9ca7cf3a21221',1,'entt::basic_actor']]], - ['_7ebasic_5fobserver',['~basic_observer',['../classentt_1_1basic__observer.html#afb6fbd2a5ce7bc57013b0bd9ad482599',1,'entt::basic_observer']]], - ['_7eemitter',['~emitter',['../classentt_1_1emitter.html#a77d175ad8e8060c3628b3fb544cba15f',1,'entt::emitter']]], - ['_7emeta_5fany',['~meta_any',['../classentt_1_1meta__any.html#a816dae3d4ed3e41fcb376ec5ec9c38c1',1,'entt::meta_any']]], - ['_7eprocess',['~process',['../classentt_1_1process.html#a9280903240c53d1f2c7474ae8ccaa48d',1,'entt::process']]], - ['_7escoped_5fconnection',['~scoped_connection',['../structentt_1_1scoped__connection.html#a8bc8b8630e2ad076216b6aca416ce32c',1,'entt::scoped_connection']]], - ['_7eservice_5flocator',['~service_locator',['../structentt_1_1service__locator.html#a2cbb6cfc1614067ae92f1c60580236a8',1,'entt::service_locator']]], - ['_7esparse_5fset',['~sparse_set',['../classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1',1,'entt::sparse_set']]] + ['_7ebasic_5factor_312',['~basic_actor',['../structentt_1_1basic__actor.html#a46dc913885c448e059e9ca7cf3a21221',1,'entt::basic_actor']]], + ['_7ebasic_5fobserver_313',['~basic_observer',['../classentt_1_1basic__observer.html#afb6fbd2a5ce7bc57013b0bd9ad482599',1,'entt::basic_observer']]], + ['_7eemitter_314',['~emitter',['../classentt_1_1emitter.html#a77d175ad8e8060c3628b3fb544cba15f',1,'entt::emitter']]], + ['_7emeta_5fany_315',['~meta_any',['../classentt_1_1meta__any.html#a816dae3d4ed3e41fcb376ec5ec9c38c1',1,'entt::meta_any']]], + ['_7eprocess_316',['~process',['../classentt_1_1process.html#a9280903240c53d1f2c7474ae8ccaa48d',1,'entt::process']]], + ['_7escoped_5fconnection_317',['~scoped_connection',['../structentt_1_1scoped__connection.html#a8bc8b8630e2ad076216b6aca416ce32c',1,'entt::scoped_connection']]], + ['_7eservice_5flocator_318',['~service_locator',['../structentt_1_1service__locator.html#a2cbb6cfc1614067ae92f1c60580236a8',1,'entt::service_locator']]], + ['_7esparse_5fset_319',['~sparse_set',['../classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1',1,'entt::sparse_set']]] ]; diff --git a/search/all_2.html b/search/all_2.html index 9543c57b1..19c530f25 100644 --- a/search/all_2.html +++ b/search/all_2.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_2.js b/search/all_2.js index db0e3653b..ff7191c33 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -1,40 +1,40 @@ var searchData= [ - ['crash_20course_3a_20core_20functionalities',['Crash Course: core functionalities',['../autotoc_md0.html',1,'']]], - ['crash_20course_3a_20service_20locator',['Crash Course: service locator',['../autotoc_md68.html',1,'']]], - ['crash_20course_3a_20runtime_20reflection_20system',['Crash Course: runtime reflection system',['../autotoc_md71.html',1,'']]], - ['crash_20course_3a_20entity_2dcomponent_20system',['Crash Course: entity-component system',['../autotoc_md8.html',1,'']]], - ['crash_20course_3a_20cooperative_20scheduler',['Crash Course: cooperative scheduler',['../autotoc_md81.html',1,'']]], - ['crash_20course_3a_20resource_20management',['Crash Course: resource management',['../autotoc_md86.html',1,'']]], - ['crash_20course_3a_20events_2c_20signals_20and_20everything_20in_20between',['Crash Course: events, signals and everything in between',['../autotoc_md89.html',1,'']]], - ['cache',['cache',['../structentt_1_1cache.html',1,'entt::cache< Resource >'],['../structentt_1_1cache.html#a1325fdf2f5645b5abb68184b7927e043',1,'entt::cache::cache()=default'],['../structentt_1_1cache.html#a58384e1a8f11c3055e88911893df4d73',1,'entt::cache::cache(cache &&)=default']]], - ['cache_3c_20resource_20_3e',['cache< Resource >',['../classentt_1_1handle.html#adcd47fa89dbe180ef0db46d3f0c43762',1,'entt::handle::cache< Resource >()'],['../classentt_1_1loader.html#adcd47fa89dbe180ef0db46d3f0c43762',1,'entt::loader::cache< Resource >()']]], - ['capacity',['capacity',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a75b0b56face16da50726650622a84e94',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::capacity()'],['../classentt_1_1basic__registry.html#a90147848037f6661c2b7d28fb98dbd61',1,'entt::basic_registry::capacity() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#abde8cee1ff1060eaebae6bef1e6c5e0e',1,'entt::basic_registry::capacity() const ENTT_NOEXCEPT'],['../classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656',1,'entt::sparse_set::capacity()']]], - ['cast',['cast',['../classentt_1_1meta__any.html#a160947a443eca2b61c5bf53f4cb8c6b4',1,'entt::meta_any::cast() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a65793af4f215d84dd42e2d8da82a6057',1,'entt::meta_any::cast() ENTT_NOEXCEPT'],['../structentt_1_1meta__base.html#aa83c9d560b8b684d93f8df90830d6c56',1,'entt::meta_base::cast()']]], - ['cbegin',['cbegin',['../classentt_1_1basic__storage.html#aa5499c18eea80f3c903afef5031abf1b',1,'entt::basic_storage::cbegin()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a4a1f9fe415478f42e27b51ae56a87fcf',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::cbegin()']]], - ['cend',['cend',['../classentt_1_1basic__storage.html#a5fb9f5fd4996f424ab94b70f79b15205',1,'entt::basic_storage::cend()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a0f935bdaca5c82f9d433d349bf28ee89',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::cend()']]], - ['choice',['choice',['../namespaceentt.html#a089f75043b082abca3ea144bce44e9ae',1,'entt']]], - ['choice_5ft',['choice_t',['../structentt_1_1choice__t.html',1,'entt']]], - ['choice_5ft_3c_200_20_3e',['choice_t< 0 >',['../structentt_1_1choice__t_3_010_01_4.html',1,'entt']]], - ['clear',['clear',['../classentt_1_1basic__observer.html#ade730cb09309ed7077616a908b25c2e7',1,'entt::basic_observer::clear()'],['../classentt_1_1scheduler.html#a5a0f92dbe54b58751237a567e86805e0',1,'entt::scheduler::clear()'],['../structentt_1_1cache.html#a8187069bfa98f774b5109558bbd5f859',1,'entt::cache::clear()'],['../classentt_1_1emitter.html#a09386e63b0871a304e295921c574318a',1,'entt::emitter::clear() ENTT_NOEXCEPT'],['../classentt_1_1emitter.html#acedafaefe2c9c91282c84e79aef26a35',1,'entt::emitter::clear() ENTT_NOEXCEPT']]], - ['clone',['clone',['../classentt_1_1basic__registry.html#ad846f4b2f0097d33af598747df1a2365',1,'entt::basic_registry']]], - ['collect',['collect',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a87ff1713373deff0bd7c71f4e0a32fe1',1,'entt::sigh< Ret(Args...)>']]], - ['collector',['collector',['../namespaceentt.html#aea8b073b774362fe800d9cce3542927a',1,'entt']]], - ['component',['component',['../classentt_1_1basic__snapshot.html#a59cf70d5b7730d388f3a63845e8faede',1,'entt::basic_snapshot::component(Archive &archive) const'],['../classentt_1_1basic__snapshot.html#a05fff12a4af42f0ad77dc4893856772c',1,'entt::basic_snapshot::component(Archive &archive, It first, It last) const'],['../classentt_1_1basic__snapshot__loader.html#af7352e091c3421432cc2ef77010a0a2d',1,'entt::basic_snapshot_loader::component()'],['../classentt_1_1basic__continuous__loader.html#a315b55f7576992d9261ee812f202d5ad',1,'entt::basic_continuous_loader::component()']]], - ['connect',['connect',['../classentt_1_1basic__observer.html#a7d69a8bc866b01cc677de492bc436209',1,'entt::basic_observer::connect()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a6e732abcbc4aa9b8899c92d8f21e55a6',1,'entt::delegate< Ret(Args...)>::connect() ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#aae828d209ffe33590c2bb8e4b37f47ef',1,'entt::delegate< Ret(Args...)>::connect(Type &value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#afcdce5ab5ae55520cce86f3f79b38e9c',1,'entt::delegate< Ret(Args...)>::connect(Type *value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#af6aaad88082bcdd3eb5788afafb6cc54',1,'entt::sink< Ret(Args...)>::connect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a8ece8c96c845649c3edc06bce75cd7ce',1,'entt::sink< Ret(Args...)>::connect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ae8ac6c23cf042785f627f9d15b943e1c',1,'entt::sink< Ret(Args...)>::connect(Type *value_or_instance)']]], - ['connect_5farg',['connect_arg',['../namespaceentt.html#af1e73acd6f3d892955819677dc2664b7',1,'entt']]], - ['connect_5farg_5ft',['connect_arg_t',['../structentt_1_1connect__arg__t.html',1,'entt']]], - ['connection',['connection',['../structentt_1_1emitter_1_1connection.html',1,'entt::emitter< Derived >::connection< Event >'],['../classentt_1_1connection.html',1,'entt::connection'],['../structentt_1_1emitter_1_1connection.html#a846b5190231aee4dd2340ab910adea40',1,'entt::emitter::connection::connection() ENTT_NOEXCEPT=default'],['../structentt_1_1emitter_1_1connection.html#a6497a7521b75836697bf4fb97de246d7',1,'entt::emitter::connection::connection(typename event_handler< Event >::connection_type conn)'],['../classentt_1_1connection.html#a1d11f6b9d00a3f0e5364111438a1cee5',1,'entt::connection::connection()=default'],['../classentt_1_1connection.html#a96098253d2abdc1a6bc3770b2914feb5',1,'entt::connection::connection(const connection &)=default'],['../classentt_1_1connection.html#a382faa75cdfc741f36ff433b6c72550d',1,'entt::connection::connection(connection &&other)']]], - ['const_5fiterator_5ftype',['const_iterator_type',['../classentt_1_1basic__storage.html#aaa02d4db8defee92683bbc47b3eaa869',1,'entt::basic_storage']]], - ['construct',['construct',['../classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f',1,'entt::sparse_set::construct()'],['../classentt_1_1basic__storage.html#a4cf7d707b57b6dd63c4d7852a23b6f5e',1,'entt::basic_storage::construct()'],['../classentt_1_1meta__type.html#ad9c9a821b8047a5b48efadd2a045da2a',1,'entt::meta_type::construct()']]], - ['contains',['contains',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a2e5841cfbbad8dbcf4311e60d09a8816',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::contains()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a20768da49ef9b9dc4cd8d35e22009819',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::contains()'],['../classentt_1_1basic__runtime__view.html#a3754c1d13392fc18daaf2003867a64fd',1,'entt::basic_runtime_view::contains()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ad06b6b506987ebf64d7d8ea017b1e9d7',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::contains()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a90aa545d2da9c46ec4c43d74f2a35b44',1,'entt::basic_view< Entity, exclude_t<>, Component >::contains()'],['../structentt_1_1cache.html#a36b26b47cd9aa4564e9acc533b62105b',1,'entt::cache::contains()']]], - ['continuous_5floader',['continuous_loader',['../namespaceentt.html#a37b5b489846f6f2a5d143db2b4aea5d0',1,'entt']]], - ['conv',['conv',['../classentt_1_1meta__factory.html#ad4245f8f4aa5209fbd8f48fbba195c7b',1,'entt::meta_factory::conv() ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#ad4245f8f4aa5209fbd8f48fbba195c7b',1,'entt::meta_factory::conv() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a148df7974d347bc1b4c9cad9f30c51ef',1,'entt::meta_type::conv(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae6ea2662ab2d241577d0c1f51b7b97d0',1,'entt::meta_type::conv() const ENTT_NOEXCEPT']]], - ['convert',['convert',['../classentt_1_1meta__any.html#a3d45a3781d92493250d065ea900b8d70',1,'entt::meta_any::convert() const'],['../classentt_1_1meta__any.html#a7808deb0d8926b75fa173d1e193a2597',1,'entt::meta_any::convert()'],['../structentt_1_1meta__conv.html#acd513d5e76857918ecb6208f79c0b309',1,'entt::meta_conv::convert()']]], - ['create',['create',['../classentt_1_1basic__registry.html#a32d0bb4c8ad63d78c8ae455dfeb02c59',1,'entt::basic_registry::create()'],['../classentt_1_1basic__registry.html#a3dc6b7ace48533c41cf0fb28a4b0a36c',1,'entt::basic_registry::create(It first, It last)'],['../classentt_1_1basic__registry.html#a9e5762d177eff276d66b10a7ed89c59f',1,'entt::basic_registry::create(entity_type src, const basic_registry &other, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a90e546bffd4d75460cfd18e4f0fc624d',1,'entt::basic_registry::create(It first, It last, entity_type src, const basic_registry &other, exclude_t< Exclude... >={})']]], - ['ctor',['ctor',['../classentt_1_1meta__factory.html#a29514cae07fc5df16b6c73ffb5ffa73b',1,'entt::meta_factory::ctor() ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#ab9206cfe67bec72e6bfce975fbf5b955',1,'entt::meta_factory::ctor() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a527e242b24025efb218a7936bb82955e',1,'entt::meta_type::ctor(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a19e66bc8271fac7f72413c09922fbc32',1,'entt::meta_type::ctor() const ENTT_NOEXCEPT']]], - ['ctx',['ctx',['../classentt_1_1basic__registry.html#ac53dddfa495bb678debd98ecc2720e6d',1,'entt::basic_registry::ctx() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#af887e7939d4b09c4634bcb24e817170b',1,'entt::basic_registry::ctx() ENTT_NOEXCEPT']]], - ['ctx_5for_5fset',['ctx_or_set',['../classentt_1_1basic__registry.html#a16f2019558eb620c5054dc8f2e312b9e',1,'entt::basic_registry']]], - ['current',['current',['../classentt_1_1basic__registry.html#ad3e60af648b0b602527dbb6ea17e95c4',1,'entt::basic_registry']]], - ['current_5ftype',['current_type',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#ac7c32cf26795aa4fc08d21597c68bc3d',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >']]] + ['cache_44',['cache',['../structentt_1_1cache.html',1,'entt::cache< Resource >'],['../structentt_1_1cache.html#a1325fdf2f5645b5abb68184b7927e043',1,'entt::cache::cache()=default'],['../structentt_1_1cache.html#a58384e1a8f11c3055e88911893df4d73',1,'entt::cache::cache(cache &&)=default']]], + ['cache_3c_20resource_20_3e_45',['cache< Resource >',['../classentt_1_1handle.html#adcd47fa89dbe180ef0db46d3f0c43762',1,'entt::handle::cache< Resource >()'],['../classentt_1_1loader.html#adcd47fa89dbe180ef0db46d3f0c43762',1,'entt::loader::cache< Resource >()']]], + ['capacity_46',['capacity',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a75b0b56face16da50726650622a84e94',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::capacity()'],['../classentt_1_1basic__registry.html#a90147848037f6661c2b7d28fb98dbd61',1,'entt::basic_registry::capacity() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#abde8cee1ff1060eaebae6bef1e6c5e0e',1,'entt::basic_registry::capacity() const ENTT_NOEXCEPT'],['../classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656',1,'entt::sparse_set::capacity()']]], + ['cast_47',['cast',['../classentt_1_1meta__any.html#a160947a443eca2b61c5bf53f4cb8c6b4',1,'entt::meta_any::cast() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a65793af4f215d84dd42e2d8da82a6057',1,'entt::meta_any::cast() ENTT_NOEXCEPT'],['../structentt_1_1meta__base.html#aa83c9d560b8b684d93f8df90830d6c56',1,'entt::meta_base::cast()']]], + ['cbegin_48',['cbegin',['../classentt_1_1basic__storage.html#aa5499c18eea80f3c903afef5031abf1b',1,'entt::basic_storage::cbegin()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a4a1f9fe415478f42e27b51ae56a87fcf',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::cbegin()']]], + ['cend_49',['cend',['../classentt_1_1basic__storage.html#a5fb9f5fd4996f424ab94b70f79b15205',1,'entt::basic_storage::cend()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a0f935bdaca5c82f9d433d349bf28ee89',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::cend()']]], + ['choice_50',['choice',['../namespaceentt.html#a089f75043b082abca3ea144bce44e9ae',1,'entt']]], + ['choice_5ft_51',['choice_t',['../structentt_1_1choice__t.html',1,'entt']]], + ['choice_5ft_3c_200_20_3e_52',['choice_t< 0 >',['../structentt_1_1choice__t_3_010_01_4.html',1,'entt']]], + ['clear_53',['clear',['../classentt_1_1basic__observer.html#ade730cb09309ed7077616a908b25c2e7',1,'entt::basic_observer::clear()'],['../classentt_1_1scheduler.html#a5a0f92dbe54b58751237a567e86805e0',1,'entt::scheduler::clear()'],['../structentt_1_1cache.html#a8187069bfa98f774b5109558bbd5f859',1,'entt::cache::clear()'],['../classentt_1_1emitter.html#a09386e63b0871a304e295921c574318a',1,'entt::emitter::clear() ENTT_NOEXCEPT'],['../classentt_1_1emitter.html#acedafaefe2c9c91282c84e79aef26a35',1,'entt::emitter::clear() ENTT_NOEXCEPT']]], + ['clone_54',['clone',['../classentt_1_1basic__registry.html#ad846f4b2f0097d33af598747df1a2365',1,'entt::basic_registry']]], + ['collect_55',['collect',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a87ff1713373deff0bd7c71f4e0a32fe1',1,'entt::sigh< Ret(Args...)>']]], + ['collector_56',['collector',['../namespaceentt.html#aea8b073b774362fe800d9cce3542927a',1,'entt']]], + ['component_57',['component',['../classentt_1_1basic__snapshot.html#a59cf70d5b7730d388f3a63845e8faede',1,'entt::basic_snapshot::component(Archive &archive) const'],['../classentt_1_1basic__snapshot.html#a05fff12a4af42f0ad77dc4893856772c',1,'entt::basic_snapshot::component(Archive &archive, It first, It last) const'],['../classentt_1_1basic__snapshot__loader.html#af7352e091c3421432cc2ef77010a0a2d',1,'entt::basic_snapshot_loader::component()'],['../classentt_1_1basic__continuous__loader.html#a315b55f7576992d9261ee812f202d5ad',1,'entt::basic_continuous_loader::component()']]], + ['connect_58',['connect',['../classentt_1_1basic__observer.html#a7d69a8bc866b01cc677de492bc436209',1,'entt::basic_observer::connect()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a6e732abcbc4aa9b8899c92d8f21e55a6',1,'entt::delegate< Ret(Args...)>::connect() ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#aae828d209ffe33590c2bb8e4b37f47ef',1,'entt::delegate< Ret(Args...)>::connect(Type &value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#afcdce5ab5ae55520cce86f3f79b38e9c',1,'entt::delegate< Ret(Args...)>::connect(Type *value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#af6aaad88082bcdd3eb5788afafb6cc54',1,'entt::sink< Ret(Args...)>::connect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a8ece8c96c845649c3edc06bce75cd7ce',1,'entt::sink< Ret(Args...)>::connect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ae8ac6c23cf042785f627f9d15b943e1c',1,'entt::sink< Ret(Args...)>::connect(Type *value_or_instance)']]], + ['connect_5farg_59',['connect_arg',['../namespaceentt.html#af1e73acd6f3d892955819677dc2664b7',1,'entt']]], + ['connect_5farg_5ft_60',['connect_arg_t',['../structentt_1_1connect__arg__t.html',1,'entt']]], + ['connection_61',['connection',['../structentt_1_1emitter_1_1connection.html',1,'entt::emitter< Derived >::connection< Event >'],['../classentt_1_1connection.html',1,'entt::connection'],['../structentt_1_1emitter_1_1connection.html#a846b5190231aee4dd2340ab910adea40',1,'entt::emitter::connection::connection() ENTT_NOEXCEPT=default'],['../structentt_1_1emitter_1_1connection.html#a6497a7521b75836697bf4fb97de246d7',1,'entt::emitter::connection::connection(typename event_handler< Event >::connection_type conn)'],['../classentt_1_1connection.html#a1d11f6b9d00a3f0e5364111438a1cee5',1,'entt::connection::connection()=default'],['../classentt_1_1connection.html#a96098253d2abdc1a6bc3770b2914feb5',1,'entt::connection::connection(const connection &)=default'],['../classentt_1_1connection.html#a382faa75cdfc741f36ff433b6c72550d',1,'entt::connection::connection(connection &&other)']]], + ['const_5fiterator_5ftype_62',['const_iterator_type',['../classentt_1_1basic__storage.html#aaa02d4db8defee92683bbc47b3eaa869',1,'entt::basic_storage']]], + ['construct_63',['construct',['../classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f',1,'entt::sparse_set::construct()'],['../classentt_1_1basic__storage.html#a4cf7d707b57b6dd63c4d7852a23b6f5e',1,'entt::basic_storage::construct()'],['../classentt_1_1meta__type.html#ad9c9a821b8047a5b48efadd2a045da2a',1,'entt::meta_type::construct()']]], + ['contains_64',['contains',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a2e5841cfbbad8dbcf4311e60d09a8816',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::contains()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a20768da49ef9b9dc4cd8d35e22009819',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::contains()'],['../classentt_1_1basic__runtime__view.html#a3754c1d13392fc18daaf2003867a64fd',1,'entt::basic_runtime_view::contains()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ad06b6b506987ebf64d7d8ea017b1e9d7',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::contains()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a90aa545d2da9c46ec4c43d74f2a35b44',1,'entt::basic_view< Entity, exclude_t<>, Component >::contains()'],['../structentt_1_1cache.html#a36b26b47cd9aa4564e9acc533b62105b',1,'entt::cache::contains()']]], + ['continuous_5floader_65',['continuous_loader',['../namespaceentt.html#a37b5b489846f6f2a5d143db2b4aea5d0',1,'entt']]], + ['conv_66',['conv',['../classentt_1_1meta__factory.html#ad4245f8f4aa5209fbd8f48fbba195c7b',1,'entt::meta_factory::conv() ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#ad4245f8f4aa5209fbd8f48fbba195c7b',1,'entt::meta_factory::conv() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a148df7974d347bc1b4c9cad9f30c51ef',1,'entt::meta_type::conv(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae6ea2662ab2d241577d0c1f51b7b97d0',1,'entt::meta_type::conv() const ENTT_NOEXCEPT']]], + ['convert_67',['convert',['../classentt_1_1meta__any.html#a3d45a3781d92493250d065ea900b8d70',1,'entt::meta_any::convert() const'],['../classentt_1_1meta__any.html#a7808deb0d8926b75fa173d1e193a2597',1,'entt::meta_any::convert()'],['../structentt_1_1meta__conv.html#acd513d5e76857918ecb6208f79c0b309',1,'entt::meta_conv::convert()']]], + ['create_68',['create',['../classentt_1_1basic__registry.html#a32d0bb4c8ad63d78c8ae455dfeb02c59',1,'entt::basic_registry::create()'],['../classentt_1_1basic__registry.html#a3dc6b7ace48533c41cf0fb28a4b0a36c',1,'entt::basic_registry::create(It first, It last)'],['../classentt_1_1basic__registry.html#a9e5762d177eff276d66b10a7ed89c59f',1,'entt::basic_registry::create(entity_type src, const basic_registry &other, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a90e546bffd4d75460cfd18e4f0fc624d',1,'entt::basic_registry::create(It first, It last, entity_type src, const basic_registry &other, exclude_t< Exclude... >={})']]], + ['ctor_69',['ctor',['../classentt_1_1meta__factory.html#a29514cae07fc5df16b6c73ffb5ffa73b',1,'entt::meta_factory::ctor() ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#ab9206cfe67bec72e6bfce975fbf5b955',1,'entt::meta_factory::ctor() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a527e242b24025efb218a7936bb82955e',1,'entt::meta_type::ctor(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a19e66bc8271fac7f72413c09922fbc32',1,'entt::meta_type::ctor() const ENTT_NOEXCEPT']]], + ['ctx_70',['ctx',['../classentt_1_1basic__registry.html#ac53dddfa495bb678debd98ecc2720e6d',1,'entt::basic_registry::ctx() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#af887e7939d4b09c4634bcb24e817170b',1,'entt::basic_registry::ctx() ENTT_NOEXCEPT']]], + ['ctx_5for_5fset_71',['ctx_or_set',['../classentt_1_1basic__registry.html#a16f2019558eb620c5054dc8f2e312b9e',1,'entt::basic_registry']]], + ['current_72',['current',['../classentt_1_1basic__registry.html#ad3e60af648b0b602527dbb6ea17e95c4',1,'entt::basic_registry']]], + ['current_5ftype_73',['current_type',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#ac7c32cf26795aa4fc08d21597c68bc3d',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >']]], + ['crash_20course_3a_20core_20functionalities_74',['Crash Course: core functionalities',['../md_docs_md_core.html',1,'']]], + ['crash_20course_3a_20entity_2dcomponent_20system_75',['Crash Course: entity-component system',['../md_docs_md_entity.html',1,'']]], + ['crash_20course_3a_20service_20locator_76',['Crash Course: service locator',['../md_docs_md_locator.html',1,'']]], + ['crash_20course_3a_20runtime_20reflection_20system_77',['Crash Course: runtime reflection system',['../md_docs_md_meta.html',1,'']]], + ['crash_20course_3a_20cooperative_20scheduler_78',['Crash Course: cooperative scheduler',['../md_docs_md_process.html',1,'']]], + ['crash_20course_3a_20resource_20management_79',['Crash Course: resource management',['../md_docs_md_resource.html',1,'']]], + ['crash_20course_3a_20events_2c_20signals_20and_20everything_20in_20between_80',['Crash Course: events, signals and everything in between',['../md_docs_md_signal.html',1,'']]] ]; diff --git a/search/all_3.html b/search/all_3.html index 03405c0fb..1ae887fc6 100644 --- a/search/all_3.html +++ b/search/all_3.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_3.js b/search/all_3.js index 1f9e63425..eb827f42a 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -1,16 +1,16 @@ var searchData= [ - ['data',['data',['../classentt_1_1basic__hashed__string.html#a7ef3ad96865551846e584780146d3d24',1,'entt::basic_hashed_string::data()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ad962c0369c08227244cea35d9a72de1a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6ce0cb9d71aee58db0b1bc7fc8dacfe0',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a15cbbf28224ee70ff5bf4143c673e310',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a50c2cb5276b7784011db9e937f31ada2',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#a435ebcce2d35f39b9f19ad84ffcdb4ea',1,'entt::basic_observer::data()'],['../classentt_1_1basic__registry.html#a79d6af03e34feae7123b924b50a91ca9',1,'entt::basic_registry::data()'],['../classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f',1,'entt::sparse_set::data()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ab976959d36185f41abaa81fe482c1def',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::data()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a1cb3cdf5882c092430ad0651e6d6094c',1,'entt::basic_view< Entity, exclude_t<>, Component >::data()'],['../classentt_1_1meta__factory.html#a66b918efd96f694b3f22d2aa5bd76584',1,'entt::meta_factory::data(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#a0e7f9e39eb31bff6e16f432488ec046a',1,'entt::meta_factory::data(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a427ee14f12077f8634919fa5c501f93a',1,'entt::meta_any::data() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a2726c037b90fef702cc90eb54e741b49',1,'entt::meta_any::data() ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a07e72402cf9163c50472b201f9c130d5',1,'entt::meta_handle::data() const ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a3f9f079820d1bcd1d987e6c2c91a733f',1,'entt::meta_handle::data() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae7ddcf22f26b4f32ca83e82cb6159c46',1,'entt::meta_type::data(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a2dc0e5378af5430c52ebb3d67d5d51a3',1,'entt::meta_type::data(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]], - ['dead',['dead',['../classentt_1_1process.html#ad83f2550ca63e03af126a07e4ae5d9dd',1,'entt::process']]], - ['delegate',['delegate',['../classentt_1_1delegate.html',1,'entt::delegate< typename >'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a5c4828a5df5ed1e8fd18465ff63eb73c',1,'entt::delegate< Ret(Args...)>::delegate() ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#ad07c76f552619d55edc17a3722958215',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Function >) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a24fbe634fda0fe5c67ec6deba0deaa66',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Candidate >, Type &value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3c3391085b16cba9024b4bbb372f7326',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Candidate >, Type *value_or_instance) ENTT_NOEXCEPT'],['../namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb',1,'entt::delegate(connect_arg_t< Function >) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>'],['../namespaceentt.html#acc75657ea551a0eecc3a3a5ed5224240',1,'entt::delegate(connect_arg_t< Candidate >, Type &) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type *>>>'],['../namespaceentt.html#a813f381cc1813a3efb62bda7a3af591d',1,'entt::delegate(connect_arg_t< Candidate >, Type *) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type *>>>']]], - ['delegate_3c_20ret_28args_2e_2e_2e_29_3e',['delegate< Ret(Args...)>',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html',1,'entt']]], - ['delegate_3c_20void_28void_20_2a_29_3e',['delegate< void(void *)>',['../classentt_1_1delegate.html',1,'entt']]], - ['delta_5ftype',['delta_type',['../classentt_1_1process.html#a625b574ea6d83e3a4933acc3d0279295',1,'entt::process']]], - ['destroy',['destroy',['../classentt_1_1basic__registry.html#af58f3add442cfb3f1fa470402db072bd',1,'entt::basic_registry::destroy(const entity_type entity)'],['../classentt_1_1basic__registry.html#a6c163dcc335da90e727e2f40e67973b7',1,'entt::basic_registry::destroy(It first, It last)'],['../classentt_1_1sparse__set.html#ab69719626bee1add76096046db86a170',1,'entt::sparse_set::destroy()'],['../classentt_1_1basic__storage.html#ab59f0a70b5d25e66062e5ae5b501ab41',1,'entt::basic_storage::destroy()'],['../classentt_1_1meta__type.html#ad91cc02c03b339a9917d5d65305c29b2',1,'entt::meta_type::destroy()']]], - ['destroyed',['destroyed',['../classentt_1_1basic__snapshot.html#a7a26ec6a9bc937a7d71b1a4723bdf4c7',1,'entt::basic_snapshot::destroyed()'],['../classentt_1_1basic__snapshot__loader.html#a49128534d0d232dd4c380513dca345c0',1,'entt::basic_snapshot_loader::destroyed()'],['../classentt_1_1basic__continuous__loader.html#a368a3a5f63c99637ee456668dab1ef36',1,'entt::basic_continuous_loader::destroyed()']]], - ['difference_5ftype',['difference_type',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#ac16a602de26d43d316b497cb11b7c6b2',1,'entt::entt_traits< std::uint16_t >::difference_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a9809b457e16f4a071a91530b23c930d6',1,'entt::entt_traits< std::uint32_t >::difference_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#afba2f77f80b0bf89a208f6876ab67271',1,'entt::entt_traits< std::uint64_t >::difference_type()']]], - ['discard',['discard',['../structentt_1_1cache.html#ad8d5b0d6ba34267b3150de559e3f028f',1,'entt::cache::discard()'],['../classentt_1_1dispatcher.html#a83958d3ca4b5ec11eca0c3b8eb591822',1,'entt::dispatcher::discard()']]], - ['disconnect',['disconnect',['../classentt_1_1basic__observer.html#a1337e8f885ca963383e5a3ed2a354955',1,'entt::basic_observer::disconnect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ab0186e5614c746b3355119a8f1abc9d1',1,'entt::sink< Ret(Args...)>::disconnect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a160d7e44b3ed3a395f3599942716a050',1,'entt::sink< Ret(Args...)>::disconnect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a61c6229967be2d84576ee933fd67940e',1,'entt::sink< Ret(Args...)>::disconnect(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a6458671dfeb3dcc3cf30c9ffc4a580d8',1,'entt::sink< Ret(Args...)>::disconnect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ae5ee15c3d483a1bd4519d4e2398a3515',1,'entt::sink< Ret(Args...)>::disconnect(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a1f9b66d606a004485f535997c96c231a',1,'entt::sink< Ret(Args...)>::disconnect()']]], - ['dispatcher',['dispatcher',['../classentt_1_1dispatcher.html',1,'entt']]], - ['dtor',['dtor',['../classentt_1_1meta__factory.html#a754b47db9b2432042d7ac23e480fdc4b',1,'entt::meta_factory::dtor()'],['../classentt_1_1meta__type.html#a0f36a3011bce598684c673a2e7734163',1,'entt::meta_type::dtor()']]] + ['data_81',['data',['../classentt_1_1basic__hashed__string.html#a7ef3ad96865551846e584780146d3d24',1,'entt::basic_hashed_string::data()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ad962c0369c08227244cea35d9a72de1a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6ce0cb9d71aee58db0b1bc7fc8dacfe0',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a15cbbf28224ee70ff5bf4143c673e310',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a50c2cb5276b7784011db9e937f31ada2',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#a435ebcce2d35f39b9f19ad84ffcdb4ea',1,'entt::basic_observer::data()'],['../classentt_1_1basic__registry.html#a79d6af03e34feae7123b924b50a91ca9',1,'entt::basic_registry::data()'],['../classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f',1,'entt::sparse_set::data()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ab976959d36185f41abaa81fe482c1def',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::data()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a1cb3cdf5882c092430ad0651e6d6094c',1,'entt::basic_view< Entity, exclude_t<>, Component >::data()'],['../classentt_1_1meta__factory.html#a66b918efd96f694b3f22d2aa5bd76584',1,'entt::meta_factory::data(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#a0e7f9e39eb31bff6e16f432488ec046a',1,'entt::meta_factory::data(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a427ee14f12077f8634919fa5c501f93a',1,'entt::meta_any::data() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a2726c037b90fef702cc90eb54e741b49',1,'entt::meta_any::data() ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a07e72402cf9163c50472b201f9c130d5',1,'entt::meta_handle::data() const ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a3f9f079820d1bcd1d987e6c2c91a733f',1,'entt::meta_handle::data() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae7ddcf22f26b4f32ca83e82cb6159c46',1,'entt::meta_type::data(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a2dc0e5378af5430c52ebb3d67d5d51a3',1,'entt::meta_type::data(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]], + ['dead_82',['dead',['../classentt_1_1process.html#ad83f2550ca63e03af126a07e4ae5d9dd',1,'entt::process']]], + ['delegate_83',['delegate',['../classentt_1_1delegate.html',1,'entt::delegate< typename >'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a5c4828a5df5ed1e8fd18465ff63eb73c',1,'entt::delegate< Ret(Args...)>::delegate() ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#ad07c76f552619d55edc17a3722958215',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Function >) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a24fbe634fda0fe5c67ec6deba0deaa66',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Candidate >, Type &value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3c3391085b16cba9024b4bbb372f7326',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Candidate >, Type *value_or_instance) ENTT_NOEXCEPT'],['../namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb',1,'entt::delegate(connect_arg_t< Function >) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>'],['../namespaceentt.html#ab2aa16e80c9720d136758f070db799ef',1,'entt::delegate(connect_arg_t< Candidate >, Type &) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type * >>>'],['../namespaceentt.html#a562674030295e4dfd8bdd47b4a332b80',1,'entt::delegate(connect_arg_t< Candidate >, Type *) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type * >>>']]], + ['delegate_3c_20ret_28args_2e_2e_2e_29_3e_84',['delegate< Ret(Args...)>',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html',1,'entt']]], + ['delegate_3c_20void_28void_20_2a_29_3e_85',['delegate< void(void *)>',['../classentt_1_1delegate.html',1,'entt']]], + ['delta_5ftype_86',['delta_type',['../classentt_1_1process.html#a625b574ea6d83e3a4933acc3d0279295',1,'entt::process']]], + ['destroy_87',['destroy',['../classentt_1_1basic__registry.html#af58f3add442cfb3f1fa470402db072bd',1,'entt::basic_registry::destroy(const entity_type entity)'],['../classentt_1_1basic__registry.html#a6c163dcc335da90e727e2f40e67973b7',1,'entt::basic_registry::destroy(It first, It last)'],['../classentt_1_1sparse__set.html#ab69719626bee1add76096046db86a170',1,'entt::sparse_set::destroy()'],['../classentt_1_1basic__storage.html#ab59f0a70b5d25e66062e5ae5b501ab41',1,'entt::basic_storage::destroy()'],['../classentt_1_1meta__type.html#ad91cc02c03b339a9917d5d65305c29b2',1,'entt::meta_type::destroy()']]], + ['destroyed_88',['destroyed',['../classentt_1_1basic__snapshot.html#a7a26ec6a9bc937a7d71b1a4723bdf4c7',1,'entt::basic_snapshot::destroyed()'],['../classentt_1_1basic__snapshot__loader.html#a49128534d0d232dd4c380513dca345c0',1,'entt::basic_snapshot_loader::destroyed()'],['../classentt_1_1basic__continuous__loader.html#a368a3a5f63c99637ee456668dab1ef36',1,'entt::basic_continuous_loader::destroyed()']]], + ['difference_5ftype_89',['difference_type',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#ac16a602de26d43d316b497cb11b7c6b2',1,'entt::entt_traits< std::uint16_t >::difference_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a9809b457e16f4a071a91530b23c930d6',1,'entt::entt_traits< std::uint32_t >::difference_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#afba2f77f80b0bf89a208f6876ab67271',1,'entt::entt_traits< std::uint64_t >::difference_type()']]], + ['discard_90',['discard',['../structentt_1_1cache.html#ad8d5b0d6ba34267b3150de559e3f028f',1,'entt::cache::discard()'],['../classentt_1_1dispatcher.html#a83958d3ca4b5ec11eca0c3b8eb591822',1,'entt::dispatcher::discard()']]], + ['disconnect_91',['disconnect',['../classentt_1_1basic__observer.html#a1337e8f885ca963383e5a3ed2a354955',1,'entt::basic_observer::disconnect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ab0186e5614c746b3355119a8f1abc9d1',1,'entt::sink< Ret(Args...)>::disconnect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a160d7e44b3ed3a395f3599942716a050',1,'entt::sink< Ret(Args...)>::disconnect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a61c6229967be2d84576ee933fd67940e',1,'entt::sink< Ret(Args...)>::disconnect(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a6458671dfeb3dcc3cf30c9ffc4a580d8',1,'entt::sink< Ret(Args...)>::disconnect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ae5ee15c3d483a1bd4519d4e2398a3515',1,'entt::sink< Ret(Args...)>::disconnect(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a1f9b66d606a004485f535997c96c231a',1,'entt::sink< Ret(Args...)>::disconnect()']]], + ['dispatcher_92',['dispatcher',['../classentt_1_1dispatcher.html',1,'entt']]], + ['dtor_93',['dtor',['../classentt_1_1meta__factory.html#a754b47db9b2432042d7ac23e480fdc4b',1,'entt::meta_factory::dtor()'],['../classentt_1_1meta__type.html#a0f36a3011bce598684c673a2e7734163',1,'entt::meta_type::dtor()']]] ]; diff --git a/search/all_4.html b/search/all_4.html index 8e1f4b9cd..14c90ef56 100644 --- a/search/all_4.html +++ b/search/all_4.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_4.js b/search/all_4.js index 1e8749b3c..1cee2b0f4 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -1,26 +1,26 @@ var searchData= [ - ['entt_20in_20action',['EnTT in Action',['../autotoc_md67.html',1,'']]], - ['each',['each',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#afb66d4717f6b9e4a19c586eb522544b7',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::each()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#abd465a5a0743b54cac72bf0d9163b7f4',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::each()'],['../classentt_1_1basic__observer.html#a181a6724835a3a41e33610003f738525',1,'entt::basic_observer::each(Func func) const'],['../classentt_1_1basic__observer.html#a535f3ddf32641a54e1c8861519933c97',1,'entt::basic_observer::each(Func func)'],['../classentt_1_1basic__registry.html#a86d2b035f54225d82548e8f03de28754',1,'entt::basic_registry::each()'],['../classentt_1_1basic__runtime__view.html#a79fe059a28f768f4dc82edf48438cce0',1,'entt::basic_runtime_view::each()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a6ebf8c6fde33027be282b12707cabd94',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::each(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ae22863700fe1d7fd7c01f5dc0acdf3c2',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::each(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae0e899f8d7e4a58bba6abc9c5b9b83c2',1,'entt::basic_view< Entity, exclude_t<>, Component >::each()'],['../structentt_1_1cache.html#a6581bd315d1627ab2d4bff995802fef8',1,'entt::cache::each()']]], - ['emitter',['emitter',['../classentt_1_1emitter.html',1,'entt::emitter< Derived >'],['../structentt_1_1emitter_1_1connection.html#a0f3bb10ad57dc0e06298fc9ba38a7bd9',1,'entt::emitter::connection::emitter()'],['../classentt_1_1emitter.html#a9c2e7d7eb8accd1d71e8aacce404e4d9',1,'entt::emitter::emitter() ENTT_NOEXCEPT=default'],['../classentt_1_1emitter.html#a842fef69b914a160b0bcc211bb77b27b',1,'entt::emitter::emitter(emitter &&)=default']]], - ['emplace',['emplace',['../classentt_1_1meta__any.html#a5b214afbab6c460f91fa050118bf1e86',1,'entt::meta_any']]], - ['empty',['empty',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a3cd0ed624125b56cf2dacd9b06d6fff6',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::empty()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#adb2cd73ac05ceb1f81c97abbf8768b31',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::empty()'],['../classentt_1_1basic__observer.html#a0986b7af08f9b1bc70bd01b9bbe66cc4',1,'entt::basic_observer::empty()'],['../classentt_1_1basic__registry.html#af78aafdf9439c8535a2652b258a3720b',1,'entt::basic_registry::empty()'],['../classentt_1_1basic__runtime__view.html#a2483047bb494ac1bea3b1823bec87985',1,'entt::basic_runtime_view::empty()'],['../classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e',1,'entt::sparse_set::empty()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a83a27c7022e24788bb742f3a4ca07475',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::empty()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a155822d1b039f427ef7577547ea06783',1,'entt::basic_view< Entity, exclude_t<>, Component >::empty()'],['../structentt_1_1service__locator.html#a9265b7273a758003283a79f7a4de6250',1,'entt::service_locator::empty()'],['../classentt_1_1scheduler.html#a817d93653aec6a479b920143bd21edbb',1,'entt::scheduler::empty()'],['../structentt_1_1cache.html#add6b60d473f777208e1585d7318c642c',1,'entt::cache::empty()'],['../classentt_1_1emitter.html#a841edafebf32b85da11657578e887961',1,'entt::emitter::empty() const ENTT_NOEXCEPT'],['../classentt_1_1emitter.html#afbac9d6fb49c28f06cb382715ed92ab9',1,'entt::emitter::empty() const ENTT_NOEXCEPT'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a3e5ae937a84fe875045efaa4294f7fe1',1,'entt::sigh< Ret(Args...)>::empty()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a07679954660265dfbcffa34a25a6033f',1,'entt::sink< Ret(Args...)>::empty()']]], - ['end',['end',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ace576f925639c740718a5c67cdaf443a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::end()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a9f29253a8f7a4cf2972b1b073bcdf3b2',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::end()'],['../classentt_1_1basic__observer.html#afe16c233c8795aa7341d61cf86c1d2d7',1,'entt::basic_observer::end()'],['../classentt_1_1basic__runtime__view.html#a777a70d6c1905a32b8a68b0b87cc9b85',1,'entt::basic_runtime_view::end()'],['../classentt_1_1sparse__set.html#a69d6c1288f673c6f92d2b1b028d6aa75',1,'entt::sparse_set::end()'],['../classentt_1_1basic__storage.html#a43640288a074495b549779ad271d7010',1,'entt::basic_storage::end() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a9922f88c0ed8f587ff4ae09745f67ae9',1,'entt::basic_storage::end() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a8ae4c428b741e0ebd29b45e5a872a8ac',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::end()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#aa843ab06756af9c8246544760ef96c59',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::end()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a91221211aded079c263eaf8e2031e441',1,'entt::basic_view< Entity, exclude_t<>, Component >::end()']]], - ['enqueue',['enqueue',['../classentt_1_1dispatcher.html#ab41d56a73b6bdc64f0862abd333ea701',1,'entt::dispatcher::enqueue(Args &&... args)'],['../classentt_1_1dispatcher.html#a1e0a488354698cbf3cba82396ac4b76e',1,'entt::dispatcher::enqueue(Event &&event)']]], - ['entities',['entities',['../classentt_1_1basic__snapshot.html#a79fe1641f3b448b37b8aecfcabf52a5e',1,'entt::basic_snapshot::entities()'],['../classentt_1_1basic__snapshot__loader.html#a0ee608c24b47e2f54a1224177a0dc741',1,'entt::basic_snapshot_loader::entities()'],['../classentt_1_1basic__continuous__loader.html#ae6655c1c6868b11f2781cec2aee77abb',1,'entt::basic_continuous_loader::entities()']]], - ['entity',['entity',['../structentt_1_1basic__actor.html#af92d62c39e122692addbfd6b75ea6922',1,'entt::basic_actor::entity()'],['../classentt_1_1basic__registry.html#a5d07b2e0105da47d25ceef530d91bb8b',1,'entt::basic_registry::entity()']]], - ['entity_5fmask',['entity_mask',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a3b85bff62534fc16597a391161fdc884',1,'entt::entt_traits< std::uint16_t >::entity_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a10edcf27d0e80e58102f41372d4b8df8',1,'entt::entt_traits< std::uint32_t >::entity_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a1127933a9ef4bfa4f64ded191b4342dd',1,'entt::entt_traits< std::uint64_t >::entity_mask()']]], - ['entity_5fshift',['entity_shift',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#aedc1e30160a37f69a5e6cc903a5113cc',1,'entt::entt_traits< std::uint16_t >::entity_shift()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#ad2fb05bba66c9426a4c239222a191650',1,'entt::entt_traits< std::uint32_t >::entity_shift()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#abbf9ff9ddaf2cb92eec8bd08dcc7d5a7',1,'entt::entt_traits< std::uint64_t >::entity_shift()']]], - ['entity_5ftype',['entity_type',['../structentt_1_1basic__actor.html#a2c2e10f12014f5269be0b9ab055acfca',1,'entt::basic_actor::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a86e202c8932f341626b29c194bd47489',1,'entt::entt_traits< std::uint16_t >::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#aecde3ac9bfc28e7f0f880a74ee2c5d8f',1,'entt::entt_traits< std::uint32_t >::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a304eb4dc4a1487cf2966d902214f7185',1,'entt::entt_traits< std::uint64_t >::entity_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abd2668a2f5cd24eeb4fe5b20f8001e33',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::entity_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ac46b1e783b4e723442366071f9f23fce',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::entity_type()'],['../classentt_1_1basic__observer.html#af7a57f53ed7a6c835129480ff6594f7d',1,'entt::basic_observer::entity_type()'],['../classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138',1,'entt::basic_registry::entity_type()'],['../classentt_1_1basic__runtime__view.html#a7ede80f53e93473099819167d42bf2f1',1,'entt::basic_runtime_view::entity_type()'],['../classentt_1_1basic__continuous__loader.html#a90a0d33147978cb3c142408487428277',1,'entt::basic_continuous_loader::entity_type()'],['../classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780',1,'entt::sparse_set::entity_type()'],['../classentt_1_1basic__storage.html#ab49ab5a065759dcd17f6c0b6a0b8fcba',1,'entt::basic_storage::entity_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ae5fde5ec382c377b2d2fff3b8bacb6cd',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::entity_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::entity_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533',1,'entt::basic_view< Entity, exclude_t<>, Component >::entity_type()']]], - ['entt',['entt',['../namespaceentt.html',1,'']]], - ['entt_5fopaque_5ftype',['ENTT_OPAQUE_TYPE',['../namespaceentt.html#a30eed5a712064c8979741cdd932c1676',1,'entt::ENTT_OPAQUE_TYPE(entity, ENTT_ID_TYPE)'],['../namespaceentt.html#a96fad46bc9a218fdab0d9e9f85b772c8',1,'entt::ENTT_OPAQUE_TYPE(component, ENTT_ID_TYPE)']]], - ['entt_5ftraits',['entt_traits',['../structentt_1_1entt__traits.html',1,'entt']]], - ['entt_5ftraits_3c_20std_3a_3auint16_5ft_20_3e',['entt_traits< std::uint16_t >',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html',1,'entt']]], - ['entt_5ftraits_3c_20std_3a_3auint32_5ft_20_3e',['entt_traits< std::uint32_t >',['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html',1,'entt']]], - ['entt_5ftraits_3c_20std_3a_3auint64_5ft_20_3e',['entt_traits< std::uint64_t >',['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html',1,'entt']]], - ['erase',['erase',['../classentt_1_1emitter.html#a14409e5061892c1342924b25f4ec2a0c',1,'entt::emitter']]], - ['exclude',['exclude',['../namespaceentt.html#a5b73210cef43c4db35ef8ce477cc38a6',1,'entt']]], - ['exclude_5ft',['exclude_t',['../structentt_1_1exclude__t.html',1,'entt']]], - ['extended_5fmeta_5ffactory',['extended_meta_factory',['../classentt_1_1extended__meta__factory.html',1,'entt::extended_meta_factory< Type, Spec >'],['../classentt_1_1extended__meta__factory.html#aa87f603531373ae59cdcc36e34ff6300',1,'entt::extended_meta_factory::extended_meta_factory()']]], - ['extent',['extent',['../classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0',1,'entt::sparse_set::extent()'],['../classentt_1_1meta__type.html#a4eadf479b9b7f11879a24e0e76d5cd51',1,'entt::meta_type::extent()']]] + ['each_94',['each',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#afb66d4717f6b9e4a19c586eb522544b7',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::each()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#abd465a5a0743b54cac72bf0d9163b7f4',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::each()'],['../classentt_1_1basic__observer.html#a181a6724835a3a41e33610003f738525',1,'entt::basic_observer::each(Func func) const'],['../classentt_1_1basic__observer.html#a535f3ddf32641a54e1c8861519933c97',1,'entt::basic_observer::each(Func func)'],['../classentt_1_1basic__registry.html#a86d2b035f54225d82548e8f03de28754',1,'entt::basic_registry::each()'],['../classentt_1_1basic__runtime__view.html#a79fe059a28f768f4dc82edf48438cce0',1,'entt::basic_runtime_view::each()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a6ebf8c6fde33027be282b12707cabd94',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::each(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ae22863700fe1d7fd7c01f5dc0acdf3c2',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::each(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae0e899f8d7e4a58bba6abc9c5b9b83c2',1,'entt::basic_view< Entity, exclude_t<>, Component >::each()'],['../structentt_1_1cache.html#a6581bd315d1627ab2d4bff995802fef8',1,'entt::cache::each()']]], + ['emitter_95',['emitter',['../classentt_1_1emitter.html',1,'entt::emitter< Derived >'],['../structentt_1_1emitter_1_1connection.html#a0f3bb10ad57dc0e06298fc9ba38a7bd9',1,'entt::emitter::connection::emitter()'],['../classentt_1_1emitter.html#a9c2e7d7eb8accd1d71e8aacce404e4d9',1,'entt::emitter::emitter() ENTT_NOEXCEPT=default'],['../classentt_1_1emitter.html#a842fef69b914a160b0bcc211bb77b27b',1,'entt::emitter::emitter(emitter &&)=default']]], + ['emplace_96',['emplace',['../classentt_1_1meta__any.html#a5b214afbab6c460f91fa050118bf1e86',1,'entt::meta_any']]], + ['empty_97',['empty',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a3cd0ed624125b56cf2dacd9b06d6fff6',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::empty()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#adb2cd73ac05ceb1f81c97abbf8768b31',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::empty()'],['../classentt_1_1basic__observer.html#a0986b7af08f9b1bc70bd01b9bbe66cc4',1,'entt::basic_observer::empty()'],['../classentt_1_1basic__registry.html#af78aafdf9439c8535a2652b258a3720b',1,'entt::basic_registry::empty()'],['../classentt_1_1basic__runtime__view.html#a2483047bb494ac1bea3b1823bec87985',1,'entt::basic_runtime_view::empty()'],['../classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e',1,'entt::sparse_set::empty()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a83a27c7022e24788bb742f3a4ca07475',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::empty()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a155822d1b039f427ef7577547ea06783',1,'entt::basic_view< Entity, exclude_t<>, Component >::empty()'],['../structentt_1_1service__locator.html#a9265b7273a758003283a79f7a4de6250',1,'entt::service_locator::empty()'],['../classentt_1_1scheduler.html#a817d93653aec6a479b920143bd21edbb',1,'entt::scheduler::empty()'],['../structentt_1_1cache.html#add6b60d473f777208e1585d7318c642c',1,'entt::cache::empty()'],['../classentt_1_1emitter.html#a841edafebf32b85da11657578e887961',1,'entt::emitter::empty() const ENTT_NOEXCEPT'],['../classentt_1_1emitter.html#afbac9d6fb49c28f06cb382715ed92ab9',1,'entt::emitter::empty() const ENTT_NOEXCEPT'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a3e5ae937a84fe875045efaa4294f7fe1',1,'entt::sigh< Ret(Args...)>::empty()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a07679954660265dfbcffa34a25a6033f',1,'entt::sink< Ret(Args...)>::empty()']]], + ['end_98',['end',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ace576f925639c740718a5c67cdaf443a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::end()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a9f29253a8f7a4cf2972b1b073bcdf3b2',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::end()'],['../classentt_1_1basic__observer.html#afe16c233c8795aa7341d61cf86c1d2d7',1,'entt::basic_observer::end()'],['../classentt_1_1basic__runtime__view.html#a777a70d6c1905a32b8a68b0b87cc9b85',1,'entt::basic_runtime_view::end()'],['../classentt_1_1sparse__set.html#a69d6c1288f673c6f92d2b1b028d6aa75',1,'entt::sparse_set::end()'],['../classentt_1_1basic__storage.html#a43640288a074495b549779ad271d7010',1,'entt::basic_storage::end() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a9922f88c0ed8f587ff4ae09745f67ae9',1,'entt::basic_storage::end() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a8ae4c428b741e0ebd29b45e5a872a8ac',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::end()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#aa843ab06756af9c8246544760ef96c59',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::end()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a91221211aded079c263eaf8e2031e441',1,'entt::basic_view< Entity, exclude_t<>, Component >::end()']]], + ['enqueue_99',['enqueue',['../classentt_1_1dispatcher.html#ab41d56a73b6bdc64f0862abd333ea701',1,'entt::dispatcher::enqueue(Args &&... args)'],['../classentt_1_1dispatcher.html#a1e0a488354698cbf3cba82396ac4b76e',1,'entt::dispatcher::enqueue(Event &&event)']]], + ['entities_100',['entities',['../classentt_1_1basic__snapshot.html#a79fe1641f3b448b37b8aecfcabf52a5e',1,'entt::basic_snapshot::entities()'],['../classentt_1_1basic__snapshot__loader.html#a0ee608c24b47e2f54a1224177a0dc741',1,'entt::basic_snapshot_loader::entities()'],['../classentt_1_1basic__continuous__loader.html#ae6655c1c6868b11f2781cec2aee77abb',1,'entt::basic_continuous_loader::entities()']]], + ['entity_101',['entity',['../structentt_1_1basic__actor.html#af92d62c39e122692addbfd6b75ea6922',1,'entt::basic_actor::entity()'],['../classentt_1_1basic__registry.html#a5d07b2e0105da47d25ceef530d91bb8b',1,'entt::basic_registry::entity()']]], + ['entity_5fmask_102',['entity_mask',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a3b85bff62534fc16597a391161fdc884',1,'entt::entt_traits< std::uint16_t >::entity_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a10edcf27d0e80e58102f41372d4b8df8',1,'entt::entt_traits< std::uint32_t >::entity_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a1127933a9ef4bfa4f64ded191b4342dd',1,'entt::entt_traits< std::uint64_t >::entity_mask()']]], + ['entity_5fshift_103',['entity_shift',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#aedc1e30160a37f69a5e6cc903a5113cc',1,'entt::entt_traits< std::uint16_t >::entity_shift()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#ad2fb05bba66c9426a4c239222a191650',1,'entt::entt_traits< std::uint32_t >::entity_shift()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#abbf9ff9ddaf2cb92eec8bd08dcc7d5a7',1,'entt::entt_traits< std::uint64_t >::entity_shift()']]], + ['entity_5ftype_104',['entity_type',['../structentt_1_1basic__actor.html#a2c2e10f12014f5269be0b9ab055acfca',1,'entt::basic_actor::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a86e202c8932f341626b29c194bd47489',1,'entt::entt_traits< std::uint16_t >::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#aecde3ac9bfc28e7f0f880a74ee2c5d8f',1,'entt::entt_traits< std::uint32_t >::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a304eb4dc4a1487cf2966d902214f7185',1,'entt::entt_traits< std::uint64_t >::entity_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abd2668a2f5cd24eeb4fe5b20f8001e33',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::entity_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ac46b1e783b4e723442366071f9f23fce',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::entity_type()'],['../classentt_1_1basic__observer.html#af7a57f53ed7a6c835129480ff6594f7d',1,'entt::basic_observer::entity_type()'],['../classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138',1,'entt::basic_registry::entity_type()'],['../classentt_1_1basic__runtime__view.html#a7ede80f53e93473099819167d42bf2f1',1,'entt::basic_runtime_view::entity_type()'],['../classentt_1_1basic__continuous__loader.html#a90a0d33147978cb3c142408487428277',1,'entt::basic_continuous_loader::entity_type()'],['../classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780',1,'entt::sparse_set::entity_type()'],['../classentt_1_1basic__storage.html#ab49ab5a065759dcd17f6c0b6a0b8fcba',1,'entt::basic_storage::entity_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ae5fde5ec382c377b2d2fff3b8bacb6cd',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::entity_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::entity_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533',1,'entt::basic_view< Entity, exclude_t<>, Component >::entity_type()']]], + ['entt_105',['entt',['../namespaceentt.html',1,'']]], + ['entt_5fopaque_5ftype_106',['ENTT_OPAQUE_TYPE',['../namespaceentt.html#a30eed5a712064c8979741cdd932c1676',1,'entt::ENTT_OPAQUE_TYPE(entity, ENTT_ID_TYPE)'],['../namespaceentt.html#a96fad46bc9a218fdab0d9e9f85b772c8',1,'entt::ENTT_OPAQUE_TYPE(component, ENTT_ID_TYPE)']]], + ['entt_5ftraits_107',['entt_traits',['../structentt_1_1entt__traits.html',1,'entt']]], + ['entt_5ftraits_3c_20std_3a_3auint16_5ft_20_3e_108',['entt_traits< std::uint16_t >',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html',1,'entt']]], + ['entt_5ftraits_3c_20std_3a_3auint32_5ft_20_3e_109',['entt_traits< std::uint32_t >',['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html',1,'entt']]], + ['entt_5ftraits_3c_20std_3a_3auint64_5ft_20_3e_110',['entt_traits< std::uint64_t >',['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html',1,'entt']]], + ['erase_111',['erase',['../classentt_1_1emitter.html#a14409e5061892c1342924b25f4ec2a0c',1,'entt::emitter']]], + ['exclude_112',['exclude',['../namespaceentt.html#a5b73210cef43c4db35ef8ce477cc38a6',1,'entt']]], + ['exclude_5ft_113',['exclude_t',['../structentt_1_1exclude__t.html',1,'entt']]], + ['extended_5fmeta_5ffactory_114',['extended_meta_factory',['../classentt_1_1extended__meta__factory.html',1,'entt::extended_meta_factory< Type, Spec >'],['../classentt_1_1extended__meta__factory.html#aa87f603531373ae59cdcc36e34ff6300',1,'entt::extended_meta_factory::extended_meta_factory()']]], + ['extent_115',['extent',['../classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0',1,'entt::sparse_set::extent()'],['../classentt_1_1meta__type.html#a4eadf479b9b7f11879a24e0e76d5cd51',1,'entt::meta_type::extent()']]], + ['entt_20in_20action_116',['EnTT in Action',['../md_docs_md_links.html',1,'']]] ]; diff --git a/search/all_5.html b/search/all_5.html index 89a879ea9..60fa53e9e 100644 --- a/search/all_5.html +++ b/search/all_5.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_5.js b/search/all_5.js index d18c543fc..2ed703aef 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -1,10 +1,10 @@ var searchData= [ - ['frequently_20asked_20questions',['Frequently Asked Questions',['../autotoc_md50.html',1,'']]], - ['fail',['fail',['../classentt_1_1process.html#a81816bdd06dce4058bfe3cfa5d42a64c',1,'entt::process']]], - ['family',['family',['../classentt_1_1family.html',1,'entt']]], - ['family_5ftype',['family_type',['../classentt_1_1family.html#a86a662c9342935bcf145b70bf36191cb',1,'entt::family']]], - ['find',['find',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abc62bcf057442361bf5560d570bad011',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::find()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a65394766edeb7e6aad42fc7a387dacb8',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::find()'],['../classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01',1,'entt::sparse_set::find()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a46c8d4e4e9d4c1bd5c6a7e49116d68b3',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::find()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae70c45e7dee534232252f5611df43011',1,'entt::basic_view< Entity, exclude_t<>, Component >::find()']]], - ['func',['func',['../classentt_1_1meta__factory.html#ae40d97f4685edbf04a240eec58883b18',1,'entt::meta_factory::func()'],['../classentt_1_1meta__type.html#a51c81458a7e39dc8f54c4a331179fd85',1,'entt::meta_type::func(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a5961815feeed79779caa1f183bcec5a3',1,'entt::meta_type::func(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]], - ['function_5ftype',['function_type',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a235927a00f56e4b56dbfdc4e6cf5ddb4',1,'entt::delegate< Ret(Args...)>']]] + ['fail_117',['fail',['../classentt_1_1process.html#a81816bdd06dce4058bfe3cfa5d42a64c',1,'entt::process']]], + ['family_118',['family',['../classentt_1_1family.html',1,'entt']]], + ['family_5ftype_119',['family_type',['../classentt_1_1family.html#a86a662c9342935bcf145b70bf36191cb',1,'entt::family']]], + ['find_120',['find',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abc62bcf057442361bf5560d570bad011',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::find()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a65394766edeb7e6aad42fc7a387dacb8',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::find()'],['../classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01',1,'entt::sparse_set::find()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a46c8d4e4e9d4c1bd5c6a7e49116d68b3',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::find()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae70c45e7dee534232252f5611df43011',1,'entt::basic_view< Entity, exclude_t<>, Component >::find()']]], + ['func_121',['func',['../classentt_1_1meta__factory.html#ae40d97f4685edbf04a240eec58883b18',1,'entt::meta_factory::func()'],['../classentt_1_1meta__type.html#a51c81458a7e39dc8f54c4a331179fd85',1,'entt::meta_type::func(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a5961815feeed79779caa1f183bcec5a3',1,'entt::meta_type::func(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]], + ['function_5ftype_122',['function_type',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a235927a00f56e4b56dbfdc4e6cf5ddb4',1,'entt::delegate< Ret(Args...)>']]], + ['frequently_20asked_20questions_123',['Frequently Asked Questions',['../md_docs_md_faq.html',1,'']]] ]; diff --git a/search/all_6.html b/search/all_6.html index 6afac0662..718036313 100644 --- a/search/all_6.html +++ b/search/all_6.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_6.js b/search/all_6.js index f239a769c..90e032266 100644 --- a/search/all_6.js +++ b/search/all_6.js @@ -1,7 +1,7 @@ var searchData= [ - ['get',['get',['../structentt_1_1basic__actor.html#a64d3d7ff9801b9efbb3cf08d93baca88',1,'entt::basic_actor::get() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a194f434fa3ed013a5266ebcbaa4761d8',1,'entt::basic_actor::get() ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9f4ca1f67341a3a3e1397fb0e61ca662',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::get()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a8d76ebfec56ed423b41f7837325f1153',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::get()'],['../classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df',1,'entt::basic_registry::get([[maybe_unused]] const entity_type entity) const'],['../classentt_1_1basic__registry.html#aed5e3029a1134f1bb87617d0e99f89ac',1,'entt::basic_registry::get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ab9f40b67e8a21a0aa2071ea127a1e4b9',1,'entt::basic_storage::get(const entity_type entt) const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a629a39bfc6a29036671dea9d9b42f70d',1,'entt::basic_storage::get(const entity_type entt) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a23b589f4d08e6c18071c95b310004bd9',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::get()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7c9adf96ab08975fd9c934ed8f76a091',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::get()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0cd8a539628cc3090183094b07a44521',1,'entt::basic_view< Entity, exclude_t<>, Component >::get()'],['../structentt_1_1service__locator.html#ab72c1dab3eec4554690a82457894b385',1,'entt::service_locator::get()'],['../structentt_1_1meta__data.html#a3d63885952dd5a7613bab37fc63c8ecd',1,'entt::meta_data::get(meta_handle handle) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#a98d5a4bd199049ba9ea553ec21fac583',1,'entt::meta_data::get(meta_handle handle, std::size_t index) const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#afa206e76d351ac2c502996e08f858612',1,'entt::handle::get() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#a7c67da714dbde0cd2f2a35143ea36f3b',1,'entt::handle::get() ENTT_NOEXCEPT'],['../namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e',1,'entt::get()']]], - ['get_5for_5fassign',['get_or_assign',['../classentt_1_1basic__registry.html#a20a14f97c1684c5aaeeba13ba40a3ad7',1,'entt::basic_registry']]], - ['get_5ft',['get_t',['../structentt_1_1get__t.html',1,'entt']]], - ['group',['group',['../structentt_1_1basic__collector_3_4.html#a0d5a3c7d8d96f79585930f93939136f0',1,'entt::basic_collector<>::group()'],['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#aef9fec26165b69baf8c7593fcd93327c',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >::group()'],['../classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3',1,'entt::basic_registry::group(get_t< Get... >, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a886142ed67a5a4a3a7114569c0a0f74a',1,'entt::basic_registry::group(get_t< Get... >, exclude_t< Exclude... >={}) const'],['../classentt_1_1basic__registry.html#ad8a3da35761199f663293d1b30a33bc7',1,'entt::basic_registry::group(exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a33979dba930ff03181b63866a712944c',1,'entt::basic_registry::group(exclude_t< Exclude... >={}) const'],['../namespaceentt.html#a010d1bbf234dbca47e6755fc278e36b5',1,'entt::group()']]] + ['get_124',['get',['../structentt_1_1basic__actor.html#a64d3d7ff9801b9efbb3cf08d93baca88',1,'entt::basic_actor::get() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a194f434fa3ed013a5266ebcbaa4761d8',1,'entt::basic_actor::get() ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9f4ca1f67341a3a3e1397fb0e61ca662',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::get()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a8d76ebfec56ed423b41f7837325f1153',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::get()'],['../classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df',1,'entt::basic_registry::get([[maybe_unused]] const entity_type entity) const'],['../classentt_1_1basic__registry.html#aed5e3029a1134f1bb87617d0e99f89ac',1,'entt::basic_registry::get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ab9f40b67e8a21a0aa2071ea127a1e4b9',1,'entt::basic_storage::get(const entity_type entt) const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a629a39bfc6a29036671dea9d9b42f70d',1,'entt::basic_storage::get(const entity_type entt) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a23b589f4d08e6c18071c95b310004bd9',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::get()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7c9adf96ab08975fd9c934ed8f76a091',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::get()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0cd8a539628cc3090183094b07a44521',1,'entt::basic_view< Entity, exclude_t<>, Component >::get()'],['../structentt_1_1service__locator.html#ab72c1dab3eec4554690a82457894b385',1,'entt::service_locator::get()'],['../structentt_1_1meta__data.html#a3d63885952dd5a7613bab37fc63c8ecd',1,'entt::meta_data::get(meta_handle handle) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#a98d5a4bd199049ba9ea553ec21fac583',1,'entt::meta_data::get(meta_handle handle, std::size_t index) const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#afa206e76d351ac2c502996e08f858612',1,'entt::handle::get() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#a7c67da714dbde0cd2f2a35143ea36f3b',1,'entt::handle::get() ENTT_NOEXCEPT'],['../namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e',1,'entt::get()']]], + ['get_5for_5fassign_125',['get_or_assign',['../classentt_1_1basic__registry.html#a20a14f97c1684c5aaeeba13ba40a3ad7',1,'entt::basic_registry']]], + ['get_5ft_126',['get_t',['../structentt_1_1get__t.html',1,'entt']]], + ['group_127',['group',['../structentt_1_1basic__collector_3_4.html#a0d5a3c7d8d96f79585930f93939136f0',1,'entt::basic_collector<>::group()'],['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#aef9fec26165b69baf8c7593fcd93327c',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >::group()'],['../classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3',1,'entt::basic_registry::group(get_t< Get... >, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a886142ed67a5a4a3a7114569c0a0f74a',1,'entt::basic_registry::group(get_t< Get... >, exclude_t< Exclude... >={}) const'],['../classentt_1_1basic__registry.html#ad8a3da35761199f663293d1b30a33bc7',1,'entt::basic_registry::group(exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a33979dba930ff03181b63866a712944c',1,'entt::basic_registry::group(exclude_t< Exclude... >={}) const'],['../namespaceentt.html#a010d1bbf234dbca47e6755fc278e36b5',1,'entt::group()']]] ]; diff --git a/search/all_7.html b/search/all_7.html index de1910770..ee6d2e4a5 100644 --- a/search/all_7.html +++ b/search/all_7.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_7.js b/search/all_7.js index 4d86c514f..8f5c2511a 100644 --- a/search/all_7.js +++ b/search/all_7.js @@ -1,8 +1,8 @@ var searchData= [ - ['handle',['handle',['../classentt_1_1handle.html',1,'entt::handle< Resource >'],['../structentt_1_1cache.html#a54969aa49fc2b1b8d4b885145d085829',1,'entt::cache::handle()'],['../classentt_1_1handle.html#ac084be205973fb5feedd3c5795955f97',1,'entt::handle::handle()']]], - ['has',['has',['../structentt_1_1basic__actor.html#a8e7a76ea53bc8a0cce33462def30b9ac',1,'entt::basic_actor::has()'],['../classentt_1_1basic__registry.html#a22f516140a0fb811552f82910d95fead',1,'entt::basic_registry::has()'],['../classentt_1_1basic__continuous__loader.html#a7c2650e8116d6d32eb859435d9a31023',1,'entt::basic_continuous_loader::has()'],['../classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b',1,'entt::sparse_set::has()']]], - ['hash_5ftype',['hash_type',['../classentt_1_1basic__hashed__string.html#a7ee7dca5383cf4507949dc1261ca5efd',1,'entt::basic_hashed_string']]], - ['hashed_5fstring',['hashed_string',['../namespaceentt.html#a8f9dd22ce26cd7913a294b3fd520649b',1,'entt']]], - ['hashed_5fwstring',['hashed_wstring',['../namespaceentt.html#af2768719b1f5967caf5836b2656d0ed6',1,'entt']]] + ['handle_128',['handle',['../classentt_1_1handle.html',1,'entt::handle< Resource >'],['../structentt_1_1cache.html#a54969aa49fc2b1b8d4b885145d085829',1,'entt::cache::handle()'],['../classentt_1_1handle.html#ac084be205973fb5feedd3c5795955f97',1,'entt::handle::handle()']]], + ['has_129',['has',['../structentt_1_1basic__actor.html#a8e7a76ea53bc8a0cce33462def30b9ac',1,'entt::basic_actor::has()'],['../classentt_1_1basic__registry.html#a22f516140a0fb811552f82910d95fead',1,'entt::basic_registry::has()'],['../classentt_1_1basic__continuous__loader.html#a7c2650e8116d6d32eb859435d9a31023',1,'entt::basic_continuous_loader::has()'],['../classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b',1,'entt::sparse_set::has()']]], + ['hash_5ftype_130',['hash_type',['../classentt_1_1basic__hashed__string.html#a7ee7dca5383cf4507949dc1261ca5efd',1,'entt::basic_hashed_string']]], + ['hashed_5fstring_131',['hashed_string',['../namespaceentt.html#a8f9dd22ce26cd7913a294b3fd520649b',1,'entt']]], + ['hashed_5fwstring_132',['hashed_wstring',['../namespaceentt.html#af2768719b1f5967caf5836b2656d0ed6',1,'entt']]] ]; diff --git a/search/all_8.html b/search/all_8.html index 11e27cdb4..7829aa40c 100644 --- a/search/all_8.html +++ b/search/all_8.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_8.js b/search/all_8.js index c58f50b41..245cc7e69 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -1,32 +1,32 @@ var searchData= [ - ['id_5ftype',['id_type',['../structentt_1_1cache.html#a1baf9a66880b54284abb9a492229c639',1,'entt::cache']]], - ['identifier',['identifier',['../classentt_1_1identifier.html',1,'entt::identifier< Types >'],['../structentt_1_1meta__data.html#aa35ccf3601fd184f57333adbb45ad304',1,'entt::meta_data::identifier()'],['../structentt_1_1meta__func.html#a5aaf8cb2a1ad0be02d0b7f4824f92f69',1,'entt::meta_func::identifier()'],['../classentt_1_1meta__type.html#a8fef9cb62964ff4e0b39a378a33a6b41',1,'entt::meta_type::identifier()']]], - ['identifier_5ftype',['identifier_type',['../classentt_1_1identifier.html#ae35c46f5811183291dd25294e7d82f92',1,'entt::identifier']]], - ['identity',['identity',['../structentt_1_1identity.html',1,'entt']]], - ['index',['index',['../classentt_1_1sparse__set.html#afbdea531952ca6857abdfddf7866b5a2',1,'entt::sparse_set']]], - ['insertion_5fsort',['insertion_sort',['../structentt_1_1insertion__sort.html',1,'entt']]], - ['instance',['instance',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3e0495b7612d458cbc59dc4b657d586f',1,'entt::delegate< Ret(Args...)>']]], - ['instance_5ftype',['instance_type',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a932f446e04a732546e7af0f2922ed2fa',1,'entt::sigh< Ret(Args...)>']]], - ['invoke',['invoke',['../structentt_1_1meta__ctor.html#a2402980d8233e20480e0732df86f4d11',1,'entt::meta_ctor::invoke()'],['../structentt_1_1meta__dtor.html#a0b61f83fcfee615d8a27d9ff31c3deed',1,'entt::meta_dtor::invoke()'],['../structentt_1_1meta__func.html#a6145a3e14b99154a5caec4ad66a85c88',1,'entt::meta_func::invoke()']]], - ['is_5farray',['is_array',['../classentt_1_1meta__type.html#a708c42df22be9647eca05a8c9701a7b2',1,'entt::meta_type']]], - ['is_5fclass',['is_class',['../classentt_1_1meta__type.html#a9d1e5e6cd4c097143a3055b8e56a8641',1,'entt::meta_type']]], - ['is_5fconst',['is_const',['../structentt_1_1meta__data.html#a04acd97d1fe059a1dd3daaf508e10558',1,'entt::meta_data::is_const()'],['../structentt_1_1meta__func.html#a93c1f9ba3252788f9ac470f6ad6e3fb9',1,'entt::meta_func::is_const()']]], - ['is_5fenum',['is_enum',['../classentt_1_1meta__type.html#ab2d4f56d08063128d0b4bc5cb4b1b0c9',1,'entt::meta_type']]], - ['is_5fequality_5fcomparable',['is_equality_comparable',['../structentt_1_1is__equality__comparable.html',1,'entt']]], - ['is_5fequality_5fcomparable_3c_20type_2c_20std_3a_3avoid_5ft_3c_20decltype_28std_3a_3adeclval_3c_20type_20_3e_28_29_3d_3dstd_3a_3adeclval_3c_20type_20_3e_28_29_29_3e_20_3e',['is_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> >',['../structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva22225425f92ebe2943dca66f125cfda1.html',1,'entt']]], - ['is_5fequality_5fcomparable_5fv',['is_equality_comparable_v',['../namespaceentt.html#aff2c2c940fcfd655abaa24489471dad8',1,'entt']]], - ['is_5ffloating_5fpoint',['is_floating_point',['../classentt_1_1meta__type.html#acb95ab1d8952b3595b0d820cee1aa79d',1,'entt::meta_type']]], - ['is_5ffunction_5fpointer',['is_function_pointer',['../classentt_1_1meta__type.html#a5e2c3e0856d2eff7ce2403000c67c0d6',1,'entt::meta_type']]], - ['is_5fintegral',['is_integral',['../classentt_1_1meta__type.html#a222c4b6ae628f9ed6f90cd3573f788c8',1,'entt::meta_type']]], - ['is_5fmember_5ffunction_5fpointer',['is_member_function_pointer',['../classentt_1_1meta__type.html#a184083298b97b476f02509fd5379bdbb',1,'entt::meta_type']]], - ['is_5fmember_5fobject_5fpointer',['is_member_object_pointer',['../classentt_1_1meta__type.html#a486ce6d737b37675403f3e719a2a51a2',1,'entt::meta_type']]], - ['is_5fnamed_5ftype',['is_named_type',['../structentt_1_1is__named__type.html',1,'entt']]], - ['is_5fnamed_5ftype_3c_20type_2c_20std_3a_3avoid_5ft_3c_20named_5ftype_5ftraits_5ft_3c_20std_3a_3adecay_5ft_3c_20type_20_3e_20_3e_20_3e_20_3e',['is_named_type< Type, std::void_t< named_type_traits_t< std::decay_t< Type > > > >',['../structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_268fa5a871b2de95e24d77c0786df19e.html',1,'entt']]], - ['is_5fnamed_5ftype_5fv',['is_named_type_v',['../namespaceentt.html#ab127297f5449d5c90bcef166a12c4358',1,'entt']]], - ['is_5fpointer',['is_pointer',['../classentt_1_1meta__type.html#a8eec2742984f892febcbc48a6192bdfd',1,'entt::meta_type']]], - ['is_5fstatic',['is_static',['../structentt_1_1meta__data.html#a94ae645e41c37e0da30a0353d391b9ad',1,'entt::meta_data::is_static()'],['../structentt_1_1meta__func.html#a8faf171039dc72ea51d94acc2c2ea249',1,'entt::meta_func::is_static()']]], - ['is_5funion',['is_union',['../classentt_1_1meta__type.html#ad3503617450b2814e53362206bb6fecd',1,'entt::meta_type']]], - ['is_5fvoid',['is_void',['../classentt_1_1meta__type.html#a4a8aea6060bd82daf287bb6c63c1955a',1,'entt::meta_type']]], - ['iterator_5ftype',['iterator_type',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a8b74d17f862c35fad975a557de40590f',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::iterator_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a90bde6cba7ff622e3ebfa898b3f8a9c1',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::iterator_type()'],['../classentt_1_1basic__observer.html#a7954b77084292847aa1c8da9f22d8443',1,'entt::basic_observer::iterator_type()'],['../classentt_1_1basic__runtime__view.html#afbaa87a1aa3eacd54ec3a5462faa10da',1,'entt::basic_runtime_view::iterator_type()'],['../classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469',1,'entt::sparse_set::iterator_type()'],['../classentt_1_1basic__storage.html#a9a1c32a0adebc8c3dc279064742c858f',1,'entt::basic_storage::iterator_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a3104937f03f1cf10c5804e8928107d80',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::iterator_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::iterator_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab',1,'entt::basic_view< Entity, exclude_t<>, Component >::iterator_type()']]] + ['id_5ftype_133',['id_type',['../structentt_1_1cache.html#a1baf9a66880b54284abb9a492229c639',1,'entt::cache']]], + ['identifier_134',['identifier',['../classentt_1_1identifier.html',1,'entt::identifier< Types >'],['../structentt_1_1meta__data.html#aa35ccf3601fd184f57333adbb45ad304',1,'entt::meta_data::identifier()'],['../structentt_1_1meta__func.html#a5aaf8cb2a1ad0be02d0b7f4824f92f69',1,'entt::meta_func::identifier()'],['../classentt_1_1meta__type.html#a8fef9cb62964ff4e0b39a378a33a6b41',1,'entt::meta_type::identifier()']]], + ['identifier_5ftype_135',['identifier_type',['../classentt_1_1identifier.html#ae35c46f5811183291dd25294e7d82f92',1,'entt::identifier']]], + ['identity_136',['identity',['../structentt_1_1identity.html',1,'entt']]], + ['index_137',['index',['../classentt_1_1sparse__set.html#afbdea531952ca6857abdfddf7866b5a2',1,'entt::sparse_set']]], + ['insertion_5fsort_138',['insertion_sort',['../structentt_1_1insertion__sort.html',1,'entt']]], + ['instance_139',['instance',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3e0495b7612d458cbc59dc4b657d586f',1,'entt::delegate< Ret(Args...)>']]], + ['instance_5ftype_140',['instance_type',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a932f446e04a732546e7af0f2922ed2fa',1,'entt::sigh< Ret(Args...)>']]], + ['invoke_141',['invoke',['../structentt_1_1meta__ctor.html#a2402980d8233e20480e0732df86f4d11',1,'entt::meta_ctor::invoke()'],['../structentt_1_1meta__dtor.html#a0b61f83fcfee615d8a27d9ff31c3deed',1,'entt::meta_dtor::invoke()'],['../structentt_1_1meta__func.html#a6145a3e14b99154a5caec4ad66a85c88',1,'entt::meta_func::invoke()']]], + ['is_5farray_142',['is_array',['../classentt_1_1meta__type.html#a708c42df22be9647eca05a8c9701a7b2',1,'entt::meta_type']]], + ['is_5fclass_143',['is_class',['../classentt_1_1meta__type.html#a9d1e5e6cd4c097143a3055b8e56a8641',1,'entt::meta_type']]], + ['is_5fconst_144',['is_const',['../structentt_1_1meta__data.html#a04acd97d1fe059a1dd3daaf508e10558',1,'entt::meta_data::is_const()'],['../structentt_1_1meta__func.html#a93c1f9ba3252788f9ac470f6ad6e3fb9',1,'entt::meta_func::is_const()']]], + ['is_5fenum_145',['is_enum',['../classentt_1_1meta__type.html#ab2d4f56d08063128d0b4bc5cb4b1b0c9',1,'entt::meta_type']]], + ['is_5fequality_5fcomparable_146',['is_equality_comparable',['../structentt_1_1is__equality__comparable.html',1,'entt']]], + ['is_5fequality_5fcomparable_3c_20type_2c_20std_3a_3avoid_5ft_3c_20decltype_28std_3a_3adeclval_3c_20type_20_3e_28_29_3d_3dstd_3a_3adeclval_3c_20type_20_3e_28_29_29_3e_20_3e_147',['is_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> >',['../structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva46aebf4c20f38cbd0108d1e297595736.html',1,'entt']]], + ['is_5fequality_5fcomparable_5fv_148',['is_equality_comparable_v',['../namespaceentt.html#aff2c2c940fcfd655abaa24489471dad8',1,'entt']]], + ['is_5ffloating_5fpoint_149',['is_floating_point',['../classentt_1_1meta__type.html#acb95ab1d8952b3595b0d820cee1aa79d',1,'entt::meta_type']]], + ['is_5ffunction_5fpointer_150',['is_function_pointer',['../classentt_1_1meta__type.html#a5e2c3e0856d2eff7ce2403000c67c0d6',1,'entt::meta_type']]], + ['is_5fintegral_151',['is_integral',['../classentt_1_1meta__type.html#a222c4b6ae628f9ed6f90cd3573f788c8',1,'entt::meta_type']]], + ['is_5fmember_5ffunction_5fpointer_152',['is_member_function_pointer',['../classentt_1_1meta__type.html#a184083298b97b476f02509fd5379bdbb',1,'entt::meta_type']]], + ['is_5fmember_5fobject_5fpointer_153',['is_member_object_pointer',['../classentt_1_1meta__type.html#a486ce6d737b37675403f3e719a2a51a2',1,'entt::meta_type']]], + ['is_5fnamed_5ftype_154',['is_named_type',['../structentt_1_1is__named__type.html',1,'entt']]], + ['is_5fnamed_5ftype_3c_20type_2c_20std_3a_3avoid_5ft_3c_20named_5ftype_5ftraits_5ft_3c_20std_3a_3adecay_5ft_3c_20type_20_3e_20_3e_20_3e_20_3e_155',['is_named_type< Type, std::void_t< named_type_traits_t< std::decay_t< Type > > > >',['../structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_268fa5a871b2de95e24d77c0786df19e.html',1,'entt']]], + ['is_5fnamed_5ftype_5fv_156',['is_named_type_v',['../namespaceentt.html#ab127297f5449d5c90bcef166a12c4358',1,'entt']]], + ['is_5fpointer_157',['is_pointer',['../classentt_1_1meta__type.html#a8eec2742984f892febcbc48a6192bdfd',1,'entt::meta_type']]], + ['is_5fstatic_158',['is_static',['../structentt_1_1meta__data.html#a94ae645e41c37e0da30a0353d391b9ad',1,'entt::meta_data::is_static()'],['../structentt_1_1meta__func.html#a8faf171039dc72ea51d94acc2c2ea249',1,'entt::meta_func::is_static()']]], + ['is_5funion_159',['is_union',['../classentt_1_1meta__type.html#ad3503617450b2814e53362206bb6fecd',1,'entt::meta_type']]], + ['is_5fvoid_160',['is_void',['../classentt_1_1meta__type.html#a4a8aea6060bd82daf287bb6c63c1955a',1,'entt::meta_type']]], + ['iterator_5ftype_161',['iterator_type',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a8b74d17f862c35fad975a557de40590f',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::iterator_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a90bde6cba7ff622e3ebfa898b3f8a9c1',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::iterator_type()'],['../classentt_1_1basic__observer.html#a7954b77084292847aa1c8da9f22d8443',1,'entt::basic_observer::iterator_type()'],['../classentt_1_1basic__runtime__view.html#afbaa87a1aa3eacd54ec3a5462faa10da',1,'entt::basic_runtime_view::iterator_type()'],['../classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469',1,'entt::sparse_set::iterator_type()'],['../classentt_1_1basic__storage.html#a9a1c32a0adebc8c3dc279064742c858f',1,'entt::basic_storage::iterator_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a3104937f03f1cf10c5804e8928107d80',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::iterator_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::iterator_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab',1,'entt::basic_view< Entity, exclude_t<>, Component >::iterator_type()']]] ]; diff --git a/search/all_9.html b/search/all_9.html index f8abbbe59..e4242c716 100644 --- a/search/all_9.html +++ b/search/all_9.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_9.js b/search/all_9.js index b5e707769..7dbe73d28 100644 --- a/search/all_9.js +++ b/search/all_9.js @@ -1,4 +1,4 @@ var searchData= [ - ['key',['key',['../structentt_1_1meta__prop.html#a3f46ec94ffc028eb41c8db9915e7b6f3',1,'entt::meta_prop']]] + ['key_162',['key',['../structentt_1_1meta__prop.html#a3f46ec94ffc028eb41c8db9915e7b6f3',1,'entt::meta_prop']]] ]; diff --git a/search/all_a.html b/search/all_a.html index 9601fcee1..47a4a78d2 100644 --- a/search/all_a.html +++ b/search/all_a.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_a.js b/search/all_a.js index ea189b284..62d1dab20 100644 --- a/search/all_a.js +++ b/search/all_a.js @@ -1,7 +1,7 @@ var searchData= [ - ['less',['less',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a2728847f1d565d445bb5c1a995f5115e',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::less()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acc243830b7c8020cfa6a1a75814f3656',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::less()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#abe2ed0e4135be7b60038a5e7aa7a7f9b',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::less(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a99f59a63a7e28ec28a509e88e1a0a5f6',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::less(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a84b4522b3905af57fc30063f706553a8',1,'entt::basic_view< Entity, exclude_t<>, Component >::less()']]], - ['listener',['listener',['../classentt_1_1emitter.html#a460311b6b4adfabe69b9d964c8d0b579',1,'entt::emitter']]], - ['load',['load',['../structentt_1_1cache.html#ac84620fa85a03fc9ddef39e3995d3021',1,'entt::cache']]], - ['loader',['loader',['../classentt_1_1loader.html',1,'entt::loader< Loader, Resource >'],['../classentt_1_1basic__registry.html#a3d1400403d03bc6e3e5fd9dfe60c5dd3',1,'entt::basic_registry::loader()']]] + ['less_163',['less',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a2728847f1d565d445bb5c1a995f5115e',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::less()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acc243830b7c8020cfa6a1a75814f3656',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::less()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#abe2ed0e4135be7b60038a5e7aa7a7f9b',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::less(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a99f59a63a7e28ec28a509e88e1a0a5f6',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::less(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a84b4522b3905af57fc30063f706553a8',1,'entt::basic_view< Entity, exclude_t<>, Component >::less()']]], + ['listener_164',['listener',['../classentt_1_1emitter.html#a460311b6b4adfabe69b9d964c8d0b579',1,'entt::emitter']]], + ['load_165',['load',['../structentt_1_1cache.html#ac84620fa85a03fc9ddef39e3995d3021',1,'entt::cache']]], + ['loader_166',['loader',['../classentt_1_1loader.html',1,'entt::loader< Loader, Resource >'],['../classentt_1_1basic__registry.html#a3d1400403d03bc6e3e5fd9dfe60c5dd3',1,'entt::basic_registry::loader()']]] ]; diff --git a/search/all_b.html b/search/all_b.html index 0814e4e03..1320a43f5 100644 --- a/search/all_b.html +++ b/search/all_b.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_b.js b/search/all_b.js index 46fa1419f..44dcbe16d 100644 --- a/search/all_b.js +++ b/search/all_b.js @@ -1,20 +1,20 @@ var searchData= [ - ['map',['map',['../classentt_1_1basic__continuous__loader.html#ab077b1e21a817130db7401524ffc41a0',1,'entt::basic_continuous_loader']]], - ['matcher',['matcher',['../structentt_1_1matcher.html',1,'entt']]], - ['meta',['meta',['../namespaceentt.html#ab79e77dca50a2a5d78ce51db8a0a68e5',1,'entt']]], - ['meta_5fany',['meta_any',['../classentt_1_1meta__any.html',1,'entt::meta_any'],['../classentt_1_1meta__handle.html#acfcd01bb919b388abc55d4567862dcdc',1,'entt::meta_handle::meta_any()'],['../classentt_1_1meta__any.html#a7d9eaa43621da68af96080b7f345f2b6',1,'entt::meta_any::meta_any() ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a7d53cd9aca308797d0ddbb3d02fdaf35',1,'entt::meta_any::meta_any(std::in_place_type_t< Type >, [[maybe_unused]] Args &&... args)'],['../classentt_1_1meta__any.html#ab79ba4f90b6a9764ff65330bc71562b5',1,'entt::meta_any::meta_any(std::reference_wrapper< Type > type)'],['../classentt_1_1meta__any.html#a4a95b9d9b79763d9a53822135e930f81',1,'entt::meta_any::meta_any(meta_handle handle) ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#adb57245c636a920913ec11088473c064',1,'entt::meta_any::meta_any(Type &&type)'],['../classentt_1_1meta__any.html#a8070ecc97c91d3c294d07339073e0a6a',1,'entt::meta_any::meta_any(const meta_any &other)'],['../classentt_1_1meta__any.html#a16de68c4d78064eb025627588936edfb',1,'entt::meta_any::meta_any(meta_any &&other) ENTT_NOEXCEPT']]], - ['meta_5fbase',['meta_base',['../structentt_1_1meta__base.html',1,'entt::meta_base'],['../structentt_1_1meta__base.html#a7138b13e8dc1d75ad4e47ef89780eda4',1,'entt::meta_base::meta_base()']]], - ['meta_5fconv',['meta_conv',['../structentt_1_1meta__conv.html',1,'entt::meta_conv'],['../structentt_1_1meta__conv.html#a143077e70c5bdd5b45d9e4b2d3bf47bd',1,'entt::meta_conv::meta_conv()']]], - ['meta_5fctor',['meta_ctor',['../structentt_1_1meta__ctor.html',1,'entt::meta_ctor'],['../structentt_1_1meta__ctor.html#a2bead30533fe42d44d184cf852b3b3c0',1,'entt::meta_ctor::meta_ctor()']]], - ['meta_5fctx',['meta_ctx',['../structentt_1_1meta__ctx.html',1,'entt']]], - ['meta_5fdata',['meta_data',['../structentt_1_1meta__data.html',1,'entt::meta_data'],['../structentt_1_1meta__data.html#a4fe5508ec458bdab269c129345269ff2',1,'entt::meta_data::meta_data()']]], - ['meta_5fdtor',['meta_dtor',['../structentt_1_1meta__dtor.html',1,'entt::meta_dtor'],['../structentt_1_1meta__dtor.html#ab50c68d1bcb838404513bc08381ef3c5',1,'entt::meta_dtor::meta_dtor()']]], - ['meta_5ffactory',['meta_factory',['../classentt_1_1meta__factory.html',1,'entt']]], - ['meta_5ffunc',['meta_func',['../structentt_1_1meta__func.html',1,'entt::meta_func'],['../structentt_1_1meta__func.html#a08cf20d2ec99cca580d1121aeed7064c',1,'entt::meta_func::meta_func()']]], - ['meta_5fhandle',['meta_handle',['../classentt_1_1meta__handle.html',1,'entt::meta_handle'],['../classentt_1_1meta__any.html#a8b9314fab6c8ba30425b75c7b2e2977e',1,'entt::meta_any::meta_handle()'],['../classentt_1_1meta__handle.html#a45c9c3f6a23bcf62a0fc306296236236',1,'entt::meta_handle::meta_handle() ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a4550f4a5eadcd9e2779b1fc65e9cebf3',1,'entt::meta_handle::meta_handle(meta_any &any) ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#aa60f562026da01256ca9411d78d941f5',1,'entt::meta_handle::meta_handle(Type &obj) ENTT_NOEXCEPT']]], - ['meta_5fprop',['meta_prop',['../structentt_1_1meta__prop.html',1,'entt::meta_prop'],['../structentt_1_1meta__prop.html#aa668d575de720943ad376a273f27c14e',1,'entt::meta_prop::meta_prop()']]], - ['meta_5ftype',['meta_type',['../classentt_1_1meta__type.html',1,'entt::meta_type'],['../classentt_1_1meta__type.html#a40488260af3ad41dd35c8c4267e849f8',1,'entt::meta_type::meta_type()']]], - ['monostate',['monostate',['../structentt_1_1monostate.html',1,'entt']]], - ['monostate_5fv',['monostate_v',['../namespaceentt.html#ab43a13f7ee60bcb0d04a001f92b86fa2',1,'entt']]] + ['map_167',['map',['../classentt_1_1basic__continuous__loader.html#ab077b1e21a817130db7401524ffc41a0',1,'entt::basic_continuous_loader']]], + ['matcher_168',['matcher',['../structentt_1_1matcher.html',1,'entt']]], + ['meta_169',['meta',['../namespaceentt.html#ab79e77dca50a2a5d78ce51db8a0a68e5',1,'entt']]], + ['meta_5fany_170',['meta_any',['../classentt_1_1meta__any.html',1,'entt::meta_any'],['../classentt_1_1meta__handle.html#acfcd01bb919b388abc55d4567862dcdc',1,'entt::meta_handle::meta_any()'],['../classentt_1_1meta__any.html#a7d9eaa43621da68af96080b7f345f2b6',1,'entt::meta_any::meta_any() ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a7d53cd9aca308797d0ddbb3d02fdaf35',1,'entt::meta_any::meta_any(std::in_place_type_t< Type >, [[maybe_unused]] Args &&... args)'],['../classentt_1_1meta__any.html#ab79ba4f90b6a9764ff65330bc71562b5',1,'entt::meta_any::meta_any(std::reference_wrapper< Type > type)'],['../classentt_1_1meta__any.html#a4a95b9d9b79763d9a53822135e930f81',1,'entt::meta_any::meta_any(meta_handle handle) ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#adb57245c636a920913ec11088473c064',1,'entt::meta_any::meta_any(Type &&type)'],['../classentt_1_1meta__any.html#a8070ecc97c91d3c294d07339073e0a6a',1,'entt::meta_any::meta_any(const meta_any &other)'],['../classentt_1_1meta__any.html#a16de68c4d78064eb025627588936edfb',1,'entt::meta_any::meta_any(meta_any &&other) ENTT_NOEXCEPT']]], + ['meta_5fbase_171',['meta_base',['../structentt_1_1meta__base.html',1,'entt::meta_base'],['../structentt_1_1meta__base.html#a7138b13e8dc1d75ad4e47ef89780eda4',1,'entt::meta_base::meta_base()']]], + ['meta_5fconv_172',['meta_conv',['../structentt_1_1meta__conv.html',1,'entt::meta_conv'],['../structentt_1_1meta__conv.html#a143077e70c5bdd5b45d9e4b2d3bf47bd',1,'entt::meta_conv::meta_conv()']]], + ['meta_5fctor_173',['meta_ctor',['../structentt_1_1meta__ctor.html',1,'entt::meta_ctor'],['../structentt_1_1meta__ctor.html#a2bead30533fe42d44d184cf852b3b3c0',1,'entt::meta_ctor::meta_ctor()']]], + ['meta_5fctx_174',['meta_ctx',['../structentt_1_1meta__ctx.html',1,'entt']]], + ['meta_5fdata_175',['meta_data',['../structentt_1_1meta__data.html',1,'entt::meta_data'],['../structentt_1_1meta__data.html#a4fe5508ec458bdab269c129345269ff2',1,'entt::meta_data::meta_data()']]], + ['meta_5fdtor_176',['meta_dtor',['../structentt_1_1meta__dtor.html',1,'entt::meta_dtor'],['../structentt_1_1meta__dtor.html#ab50c68d1bcb838404513bc08381ef3c5',1,'entt::meta_dtor::meta_dtor()']]], + ['meta_5ffactory_177',['meta_factory',['../classentt_1_1meta__factory.html',1,'entt']]], + ['meta_5ffunc_178',['meta_func',['../structentt_1_1meta__func.html',1,'entt::meta_func'],['../structentt_1_1meta__func.html#a08cf20d2ec99cca580d1121aeed7064c',1,'entt::meta_func::meta_func()']]], + ['meta_5fhandle_179',['meta_handle',['../classentt_1_1meta__handle.html',1,'entt::meta_handle'],['../classentt_1_1meta__any.html#a8b9314fab6c8ba30425b75c7b2e2977e',1,'entt::meta_any::meta_handle()'],['../classentt_1_1meta__handle.html#a45c9c3f6a23bcf62a0fc306296236236',1,'entt::meta_handle::meta_handle() ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a4550f4a5eadcd9e2779b1fc65e9cebf3',1,'entt::meta_handle::meta_handle(meta_any &any) ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#aa60f562026da01256ca9411d78d941f5',1,'entt::meta_handle::meta_handle(Type &obj) ENTT_NOEXCEPT']]], + ['meta_5fprop_180',['meta_prop',['../structentt_1_1meta__prop.html',1,'entt::meta_prop'],['../structentt_1_1meta__prop.html#aa668d575de720943ad376a273f27c14e',1,'entt::meta_prop::meta_prop()']]], + ['meta_5ftype_181',['meta_type',['../classentt_1_1meta__type.html',1,'entt::meta_type'],['../classentt_1_1meta__type.html#a40488260af3ad41dd35c8c4267e849f8',1,'entt::meta_type::meta_type()']]], + ['monostate_182',['monostate',['../structentt_1_1monostate.html',1,'entt']]], + ['monostate_5fv_183',['monostate_v',['../namespaceentt.html#ab43a13f7ee60bcb0d04a001f92b86fa2',1,'entt']]] ]; diff --git a/search/all_c.html b/search/all_c.html index da08c387a..32a3a1b8f 100644 --- a/search/all_c.html +++ b/search/all_c.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_c.js b/search/all_c.js index 070a37e95..9474132d6 100644 --- a/search/all_c.js +++ b/search/all_c.js @@ -1,9 +1,9 @@ var searchData= [ - ['named_5ftype_5ftraits',['named_type_traits',['../structentt_1_1named__type__traits.html',1,'entt']]], - ['named_5ftype_5ftraits_3c_20const_20type_20_3e',['named_type_traits< const Type >',['../structentt_1_1named__type__traits_3_01const_01Type_01_4.html',1,'entt']]], - ['named_5ftype_5ftraits_3c_20type_20_3e',['named_type_traits< Type >',['../structentt_1_1named__type__traits.html',1,'entt']]], - ['named_5ftype_5ftraits_5ft',['named_type_traits_t',['../namespaceentt.html#a63a1328e9f26407f68f4f814ab86ad6f',1,'entt']]], - ['named_5ftype_5ftraits_5fv',['named_type_traits_v',['../namespaceentt.html#aacb84576de3485174075a28f5357b20d',1,'entt']]], - ['null',['null',['../namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17',1,'entt']]] + ['named_5ftype_5ftraits_184',['named_type_traits',['../structentt_1_1named__type__traits.html',1,'entt']]], + ['named_5ftype_5ftraits_3c_20const_20type_20_3e_185',['named_type_traits< const Type >',['../structentt_1_1named__type__traits_3_01const_01Type_01_4.html',1,'entt']]], + ['named_5ftype_5ftraits_3c_20type_20_3e_186',['named_type_traits< Type >',['../structentt_1_1named__type__traits.html',1,'entt']]], + ['named_5ftype_5ftraits_5ft_187',['named_type_traits_t',['../namespaceentt.html#a63a1328e9f26407f68f4f814ab86ad6f',1,'entt']]], + ['named_5ftype_5ftraits_5fv_188',['named_type_traits_v',['../namespaceentt.html#aacb84576de3485174075a28f5357b20d',1,'entt']]], + ['null_189',['null',['../namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17',1,'entt']]] ]; diff --git a/search/all_d.html b/search/all_d.html index 9986c9cbf..a3860966d 100644 --- a/search/all_d.html +++ b/search/all_d.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_d.js b/search/all_d.js index 637fd1868..d6aca7411 100644 --- a/search/all_d.js +++ b/search/all_d.js @@ -1,29 +1,29 @@ var searchData= [ - ['basic_5fgroup_3c_20entity_2c_20exclude_2c_20get_2c_20owned_2e_2e_2e_20_3e',['basic_group< Entity, Exclude, Get, Owned... >',['../structentt_1_1as__group.html#a5bc540042a69aee98c28c8446152a47f',1,'entt::as_group']]], - ['basic_5fview_3c_20entity_2c_20exclude_2c_20component_2e_2e_2e_20_3e',['basic_view< Entity, Exclude, Component... >',['../structentt_1_1as__view.html#aac140def0e18cd8dc04c486f6d5813da',1,'entt::as_view']]], - ['object_5ftype',['object_type',['../classentt_1_1basic__storage.html#aa4e4358d25212b71d9629e470b845c53',1,'entt::basic_storage::object_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ac8d68c5302c6f7b8f6ad6663d95eea25',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::object_type()']]], - ['observer',['observer',['../namespaceentt.html#a48dfbb2991c5a19c6e2578830f7e3eda',1,'entt']]], - ['on',['on',['../classentt_1_1emitter.html#a0b580005200bb810a4a3e94320efcd8a',1,'entt::emitter']]], - ['on_5fconstruct',['on_construct',['../classentt_1_1basic__registry.html#a3784cae09a1a72a861c4ccd1e76db86a',1,'entt::basic_registry']]], - ['on_5fdestroy',['on_destroy',['../classentt_1_1basic__registry.html#a2a4af2fe256e5609282686b427f0ebcf',1,'entt::basic_registry']]], - ['on_5freplace',['on_replace',['../classentt_1_1basic__registry.html#a23857b92dfe141d7fd60c450fd14507a',1,'entt::basic_registry']]], - ['once',['once',['../classentt_1_1emitter.html#a79834d452b0600ebe0e70c54f4a21fd6',1,'entt::emitter']]], - ['operator_20bool',['operator bool',['../structentt_1_1basic__actor.html#ac53927bb871e3b54a74ebc8e90fd9ade',1,'entt::basic_actor::operator bool()'],['../classentt_1_1meta__any.html#ad1cbe0447f1b0df45706712566f1b2a0',1,'entt::meta_any::operator bool()'],['../classentt_1_1meta__handle.html#a759d3375fd8e5811ca898cb8d6740eda',1,'entt::meta_handle::operator bool()'],['../structentt_1_1meta__prop.html#adb6af4bef4db742083886a0b97646407',1,'entt::meta_prop::operator bool()'],['../structentt_1_1meta__base.html#ad19d5a997c91281da3674a6b17d011bd',1,'entt::meta_base::operator bool()'],['../structentt_1_1meta__conv.html#aa7b17a68e2b9f7a1b614a5aa1e4a7c1a',1,'entt::meta_conv::operator bool()'],['../structentt_1_1meta__ctor.html#ac34d2ccb2c3ff0549775ed5c4c617ba2',1,'entt::meta_ctor::operator bool()'],['../structentt_1_1meta__dtor.html#ad4b53dd0805dd47276c196b093258deb',1,'entt::meta_dtor::operator bool()'],['../structentt_1_1meta__data.html#aebff3cb9edf609deb8577ed29225c508',1,'entt::meta_data::operator bool()'],['../structentt_1_1meta__func.html#a436c57daae914c9222de41c7b7678584',1,'entt::meta_func::operator bool()'],['../classentt_1_1meta__type.html#ae8101e23b4b79a4452f063736f86b3ad',1,'entt::meta_type::operator bool()'],['../classentt_1_1handle.html#a2c4264107321541019eeab88f4bac335',1,'entt::handle::operator bool()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a73e1029cbb6359d803a6cc06b82f80d7',1,'entt::delegate< Ret(Args...)>::operator bool()'],['../classentt_1_1connection.html#a6763393665228bcf52ad41a21105d468',1,'entt::connection::operator bool()']]], - ['operator_20const_20resource_20_26',['operator const Resource &',['../classentt_1_1handle.html#a5a6fe485f3d1af803a941f5dba9e444f',1,'entt::handle']]], - ['operator_20const_20value_5ftype_20_2a',['operator const value_type *',['../classentt_1_1basic__hashed__string.html#ad0cc0b27f0dd52a07e25f5014ba426fc',1,'entt::basic_hashed_string']]], - ['operator_20hash_5ftype',['operator hash_type',['../classentt_1_1basic__hashed__string.html#aa2009a1ac648d8bdaeac642a6476f2bd',1,'entt::basic_hashed_string']]], - ['operator_20resource_20_26',['operator Resource &',['../classentt_1_1handle.html#a38ed3e151650b67f26339b380db76c2a',1,'entt::handle']]], - ['operator_20type',['operator Type',['../structentt_1_1monostate.html#aac27bfe6d1feb94cc601cc38077f923a',1,'entt::monostate']]], - ['operator_21_3d',['operator!=',['../namespaceentt.html#a1a211752d12273a08015c524133e27c3',1,'entt::operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a3e7582fde7d0323ad068543d660116f4',1,'entt::operator!=(const meta_any &lhs, const meta_any &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#abe07bfd01b0fac902d6d89a76b8b58fe',1,'entt::operator!=(const meta_prop &lhs, const meta_prop &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a633d6546a24a66cfba27ad3f8bdbbd30',1,'entt::operator!=(const meta_base &lhs, const meta_base &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#ae0028b0d2edc4d7fd110069323d80f4b',1,'entt::operator!=(const meta_conv &lhs, const meta_conv &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a42e03a0e2b4f0ed2bf7dd7635e4d22e8',1,'entt::operator!=(const meta_ctor &lhs, const meta_ctor &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#ab4ba1bf1f3ad09a47b477ad9a320393f',1,'entt::operator!=(const meta_dtor &lhs, const meta_dtor &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#afffe04587aa936ef68791af1d99d380d',1,'entt::operator!=(const meta_data &lhs, const meta_data &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a0bccfeb5e95c4ce5ea82cac0b4738f49',1,'entt::operator!=(const meta_func &lhs, const meta_func &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a2feb1b10f84534d2ed32aed30c36cb61',1,'entt::operator!=(const meta_type &lhs, const meta_type &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a656b2ec80abf493ce1924b314d13fd18',1,'entt::operator!=(const delegate< Ret(Args...)> &lhs, const delegate< Ret(Args...)> &rhs) ENTT_NOEXCEPT']]], - ['operator_28_29',['operator()',['../structentt_1_1std__sort.html#af25b38ddb03e206a71a1f47521eaea46',1,'entt::std_sort::operator()()'],['../structentt_1_1insertion__sort.html#a73a5644fe5b683f9b9376c89ac47f2b8',1,'entt::insertion_sort::operator()()'],['../structentt_1_1radix__sort.html#a1989f6fbe18d3d82fdea9745d6b9ee96',1,'entt::radix_sort::operator()()'],['../structentt_1_1identity.html#a4663a97f57bf16459d1ca94b74965b5e',1,'entt::identity::operator()()'],['../structentt_1_1y__combinator.html#aaf600432620d702c835ff5555f962c40',1,'entt::y_combinator::operator()(Args &&... args) const'],['../structentt_1_1y__combinator.html#ab87fd1de40da60ffef1d0ed9b76280a8',1,'entt::y_combinator::operator()(Args &&... args)'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a0e53caedb53810bc96aa71bce199c990',1,'entt::delegate< Ret(Args...)>::operator()()']]], - ['operator_2a',['operator*',['../classentt_1_1handle.html#a20a3b1865543ce4ad19262470c72d4e5',1,'entt::handle::operator*() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#a0b1aa9bace6bdef7e5788f48abaad3da',1,'entt::handle::operator*() ENTT_NOEXCEPT']]], - ['operator_2d_3e',['operator->',['../classentt_1_1handle.html#a73df220e891ca8418f5f5fd476997e13',1,'entt::handle::operator->() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#ad7f9d864894ae2c8835c9b95d95db841',1,'entt::handle::operator->() ENTT_NOEXCEPT']]], - ['operator_3d',['operator=',['../structentt_1_1monostate.html#a2b2751ad1d49cbf5068fde7e0e8640ac',1,'entt::monostate::operator=()'],['../structentt_1_1basic__actor.html#a729116e0ae65677a6ed9ed9d21c111c6',1,'entt::basic_actor::operator=()'],['../classentt_1_1basic__observer.html#a03dcb6b0999d29bc39410d7ae6d9ac53',1,'entt::basic_observer::operator=(const basic_observer &)=delete'],['../classentt_1_1basic__observer.html#a8b7cd199f236a4dee02f202ec0fd6281',1,'entt::basic_observer::operator=(basic_observer &&)=delete'],['../classentt_1_1basic__registry.html#a70f7acd3a0e9a8dc4ef7e85172f93a59',1,'entt::basic_registry::operator=()'],['../classentt_1_1basic__snapshot.html#a1484b609195cfd057bbdd8808d4392bc',1,'entt::basic_snapshot::operator=()'],['../classentt_1_1basic__snapshot__loader.html#aa55eeaad2ab4dd117524afff9d6e184b',1,'entt::basic_snapshot_loader::operator=()'],['../classentt_1_1basic__continuous__loader.html#afd396d84cb27e070a6a812bd28140c75',1,'entt::basic_continuous_loader::operator=()'],['../classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34',1,'entt::sparse_set::operator=(const sparse_set &other)'],['../classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa',1,'entt::sparse_set::operator=(sparse_set &&)=default'],['../classentt_1_1meta__any.html#acfb1ce537c6072aabb53662658213e04',1,'entt::meta_any::operator=(Type &&type)'],['../classentt_1_1meta__any.html#a97360c78351767409f9db58c9f785ad5',1,'entt::meta_any::operator=(const meta_any &other)'],['../classentt_1_1meta__any.html#a8fbda3a54404e9cf4787b5b212cf1185',1,'entt::meta_any::operator=(meta_any &&other) ENTT_NOEXCEPT'],['../classentt_1_1scheduler.html#aea6ab78dbf00ba17c6e828ee0505afd9',1,'entt::scheduler::operator=()'],['../structentt_1_1cache.html#a1f4136cd86ea31278c4eaad59112e8ff',1,'entt::cache::operator=()'],['../classentt_1_1emitter.html#ab270d2c6d986621a781467e29e64629c',1,'entt::emitter::operator=()'],['../classentt_1_1connection.html#a19e6c45b11cfcd0fef1e4c086f63e891',1,'entt::connection::operator=(const connection &)=default'],['../classentt_1_1connection.html#ad7dfbcc07f74bff317efcdf6988135fa',1,'entt::connection::operator=(connection &&other)'],['../structentt_1_1scoped__connection.html#ae079c45e0eb97f31ec1d5a4be76163fc',1,'entt::scoped_connection::operator=(const scoped_connection &)=delete'],['../structentt_1_1scoped__connection.html#a4cf8b6b0683310c58af3344077fd8e97',1,'entt::scoped_connection::operator=(scoped_connection &&)=default'],['../structentt_1_1scoped__connection.html#a51d7df995ac1dee40add9f80a351fdf5',1,'entt::scoped_connection::operator=(const connection &other)'],['../structentt_1_1scoped__connection.html#ab2b9858209560ac77b4cbed95ecd116d',1,'entt::scoped_connection::operator=(connection &&other)']]], - ['operator_3d_3d',['operator==',['../classentt_1_1basic__hashed__string.html#a51311d6903443296ce076536df2b46da',1,'entt::basic_hashed_string::operator==()'],['../classentt_1_1meta__any.html#a2673fdc066e710ce94cbb2f5c3994d42',1,'entt::meta_any::operator==()'],['../structentt_1_1meta__prop.html#adbcf1179374bab74c2be1f395078b89e',1,'entt::meta_prop::operator==()'],['../structentt_1_1meta__base.html#a6469955ac7550d5396cf185795c07a15',1,'entt::meta_base::operator==()'],['../structentt_1_1meta__conv.html#a176af5a8c4b2fae4dc1d862509705152',1,'entt::meta_conv::operator==()'],['../structentt_1_1meta__ctor.html#a49299869b3adc7a3a97dc9c9cf9617a8',1,'entt::meta_ctor::operator==()'],['../structentt_1_1meta__dtor.html#a55905a8daf9dafcdc33e38e1247b1e9d',1,'entt::meta_dtor::operator==()'],['../structentt_1_1meta__data.html#ac44372da54f317b93fec85570bb50cfc',1,'entt::meta_data::operator==()'],['../structentt_1_1meta__func.html#a4d29a2982e937d0dff5dac93434099a1',1,'entt::meta_func::operator==()'],['../classentt_1_1meta__type.html#a838362aa3598bfa4cc18041d3445bace',1,'entt::meta_type::operator==()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a54ca30c9a3f7a9662363c48db4e86aae',1,'entt::delegate< Ret(Args...)>::operator==()']]], - ['operator_5b_5d',['operator[]',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ad90a0721069352d895191a6c49240e38',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::operator[]()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ad3f79a1e2f300011eeb9b3420e56fccc',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::operator[]()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a9e4d4f3d6235b755765e1935d96f307e',1,'entt::basic_view< Entity, exclude_t<>, Component >::operator[]()']]], - ['orphan',['orphan',['../classentt_1_1basic__registry.html#a10f5e61d4cabab9e9c1e87edc30de551',1,'entt::basic_registry']]], - ['orphans',['orphans',['../classentt_1_1basic__registry.html#ae337ceb77e75c10c73ffa671e09bfff8',1,'entt::basic_registry::orphans()'],['../classentt_1_1basic__snapshot__loader.html#acd881016761f5eb598763fbf3595a625',1,'entt::basic_snapshot_loader::orphans()'],['../classentt_1_1basic__continuous__loader.html#ac8b328bb8c6c4acde51ab5b943f0ea86',1,'entt::basic_continuous_loader::orphans()']]], - ['overload',['overload',['../namespaceentt.html#ae289e7f5640bb43223901039346e5ce0',1,'entt::overload(Type Class::*member) ENTT_NOEXCEPT'],['../namespaceentt.html#a33de87747dbfdef2a916f290d4f66836',1,'entt::overload(Type *func) ENTT_NOEXCEPT']]], - ['overloaded',['overloaded',['../structentt_1_1overloaded.html',1,'entt::overloaded< Func >'],['../namespaceentt.html#a4f3131bbda45993bd35a9d07db09e777',1,'entt::overloaded(Type...) -> overloaded< Type... >']]] + ['basic_5fgroup_3c_20entity_2c_20exclude_2c_20get_2c_20owned_2e_2e_2e_20_3e_190',['basic_group< Entity, Exclude, Get, Owned... >',['../structentt_1_1as__group.html#a5bc540042a69aee98c28c8446152a47f',1,'entt::as_group']]], + ['basic_5fview_3c_20entity_2c_20exclude_2c_20component_2e_2e_2e_20_3e_191',['basic_view< Entity, Exclude, Component... >',['../structentt_1_1as__view.html#aac140def0e18cd8dc04c486f6d5813da',1,'entt::as_view']]], + ['object_5ftype_192',['object_type',['../classentt_1_1basic__storage.html#aa4e4358d25212b71d9629e470b845c53',1,'entt::basic_storage::object_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ac8d68c5302c6f7b8f6ad6663d95eea25',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::object_type()']]], + ['observer_193',['observer',['../namespaceentt.html#a48dfbb2991c5a19c6e2578830f7e3eda',1,'entt']]], + ['on_194',['on',['../classentt_1_1emitter.html#a0b580005200bb810a4a3e94320efcd8a',1,'entt::emitter']]], + ['on_5fconstruct_195',['on_construct',['../classentt_1_1basic__registry.html#a3784cae09a1a72a861c4ccd1e76db86a',1,'entt::basic_registry']]], + ['on_5fdestroy_196',['on_destroy',['../classentt_1_1basic__registry.html#a2a4af2fe256e5609282686b427f0ebcf',1,'entt::basic_registry']]], + ['on_5freplace_197',['on_replace',['../classentt_1_1basic__registry.html#a23857b92dfe141d7fd60c450fd14507a',1,'entt::basic_registry']]], + ['once_198',['once',['../classentt_1_1emitter.html#a79834d452b0600ebe0e70c54f4a21fd6',1,'entt::emitter']]], + ['operator_20bool_199',['operator bool',['../structentt_1_1basic__actor.html#ac53927bb871e3b54a74ebc8e90fd9ade',1,'entt::basic_actor::operator bool()'],['../classentt_1_1meta__any.html#ad1cbe0447f1b0df45706712566f1b2a0',1,'entt::meta_any::operator bool()'],['../classentt_1_1meta__handle.html#a759d3375fd8e5811ca898cb8d6740eda',1,'entt::meta_handle::operator bool()'],['../structentt_1_1meta__prop.html#adb6af4bef4db742083886a0b97646407',1,'entt::meta_prop::operator bool()'],['../structentt_1_1meta__base.html#ad19d5a997c91281da3674a6b17d011bd',1,'entt::meta_base::operator bool()'],['../structentt_1_1meta__conv.html#aa7b17a68e2b9f7a1b614a5aa1e4a7c1a',1,'entt::meta_conv::operator bool()'],['../structentt_1_1meta__ctor.html#ac34d2ccb2c3ff0549775ed5c4c617ba2',1,'entt::meta_ctor::operator bool()'],['../structentt_1_1meta__dtor.html#ad4b53dd0805dd47276c196b093258deb',1,'entt::meta_dtor::operator bool()'],['../structentt_1_1meta__data.html#aebff3cb9edf609deb8577ed29225c508',1,'entt::meta_data::operator bool()'],['../structentt_1_1meta__func.html#a436c57daae914c9222de41c7b7678584',1,'entt::meta_func::operator bool()'],['../classentt_1_1meta__type.html#ae8101e23b4b79a4452f063736f86b3ad',1,'entt::meta_type::operator bool()'],['../classentt_1_1handle.html#a2c4264107321541019eeab88f4bac335',1,'entt::handle::operator bool()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a73e1029cbb6359d803a6cc06b82f80d7',1,'entt::delegate< Ret(Args...)>::operator bool()'],['../classentt_1_1connection.html#a6763393665228bcf52ad41a21105d468',1,'entt::connection::operator bool()']]], + ['operator_20const_20resource_20_26_200',['operator const Resource &',['../classentt_1_1handle.html#a5a6fe485f3d1af803a941f5dba9e444f',1,'entt::handle']]], + ['operator_20const_20value_5ftype_20_2a_201',['operator const value_type *',['../classentt_1_1basic__hashed__string.html#ad0cc0b27f0dd52a07e25f5014ba426fc',1,'entt::basic_hashed_string']]], + ['operator_20hash_5ftype_202',['operator hash_type',['../classentt_1_1basic__hashed__string.html#aa2009a1ac648d8bdaeac642a6476f2bd',1,'entt::basic_hashed_string']]], + ['operator_20resource_20_26_203',['operator Resource &',['../classentt_1_1handle.html#a38ed3e151650b67f26339b380db76c2a',1,'entt::handle']]], + ['operator_20type_204',['operator Type',['../structentt_1_1monostate.html#aac27bfe6d1feb94cc601cc38077f923a',1,'entt::monostate']]], + ['operator_21_3d_205',['operator!=',['../namespaceentt.html#a1a211752d12273a08015c524133e27c3',1,'entt::operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a3e7582fde7d0323ad068543d660116f4',1,'entt::operator!=(const meta_any &lhs, const meta_any &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#abe07bfd01b0fac902d6d89a76b8b58fe',1,'entt::operator!=(const meta_prop &lhs, const meta_prop &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a633d6546a24a66cfba27ad3f8bdbbd30',1,'entt::operator!=(const meta_base &lhs, const meta_base &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#ae0028b0d2edc4d7fd110069323d80f4b',1,'entt::operator!=(const meta_conv &lhs, const meta_conv &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a42e03a0e2b4f0ed2bf7dd7635e4d22e8',1,'entt::operator!=(const meta_ctor &lhs, const meta_ctor &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#ab4ba1bf1f3ad09a47b477ad9a320393f',1,'entt::operator!=(const meta_dtor &lhs, const meta_dtor &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#afffe04587aa936ef68791af1d99d380d',1,'entt::operator!=(const meta_data &lhs, const meta_data &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a0bccfeb5e95c4ce5ea82cac0b4738f49',1,'entt::operator!=(const meta_func &lhs, const meta_func &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a2feb1b10f84534d2ed32aed30c36cb61',1,'entt::operator!=(const meta_type &lhs, const meta_type &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a656b2ec80abf493ce1924b314d13fd18',1,'entt::operator!=(const delegate< Ret(Args...)> &lhs, const delegate< Ret(Args...)> &rhs) ENTT_NOEXCEPT']]], + ['operator_28_29_206',['operator()',['../structentt_1_1std__sort.html#af25b38ddb03e206a71a1f47521eaea46',1,'entt::std_sort::operator()()'],['../structentt_1_1insertion__sort.html#a73a5644fe5b683f9b9376c89ac47f2b8',1,'entt::insertion_sort::operator()()'],['../structentt_1_1radix__sort.html#a1989f6fbe18d3d82fdea9745d6b9ee96',1,'entt::radix_sort::operator()()'],['../structentt_1_1identity.html#a4663a97f57bf16459d1ca94b74965b5e',1,'entt::identity::operator()()'],['../structentt_1_1y__combinator.html#aaf600432620d702c835ff5555f962c40',1,'entt::y_combinator::operator()(Args &&... args) const'],['../structentt_1_1y__combinator.html#ab87fd1de40da60ffef1d0ed9b76280a8',1,'entt::y_combinator::operator()(Args &&... args)'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a0e53caedb53810bc96aa71bce199c990',1,'entt::delegate< Ret(Args...)>::operator()()']]], + ['operator_2a_207',['operator*',['../classentt_1_1handle.html#a20a3b1865543ce4ad19262470c72d4e5',1,'entt::handle::operator*() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#a0b1aa9bace6bdef7e5788f48abaad3da',1,'entt::handle::operator*() ENTT_NOEXCEPT']]], + ['operator_2d_3e_208',['operator->',['../classentt_1_1handle.html#a73df220e891ca8418f5f5fd476997e13',1,'entt::handle::operator->() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#ad7f9d864894ae2c8835c9b95d95db841',1,'entt::handle::operator->() ENTT_NOEXCEPT']]], + ['operator_3d_209',['operator=',['../structentt_1_1monostate.html#a2b2751ad1d49cbf5068fde7e0e8640ac',1,'entt::monostate::operator=()'],['../structentt_1_1basic__actor.html#a729116e0ae65677a6ed9ed9d21c111c6',1,'entt::basic_actor::operator=()'],['../classentt_1_1basic__observer.html#a03dcb6b0999d29bc39410d7ae6d9ac53',1,'entt::basic_observer::operator=(const basic_observer &)=delete'],['../classentt_1_1basic__observer.html#a8b7cd199f236a4dee02f202ec0fd6281',1,'entt::basic_observer::operator=(basic_observer &&)=delete'],['../classentt_1_1basic__registry.html#a70f7acd3a0e9a8dc4ef7e85172f93a59',1,'entt::basic_registry::operator=()'],['../classentt_1_1basic__snapshot.html#a1484b609195cfd057bbdd8808d4392bc',1,'entt::basic_snapshot::operator=()'],['../classentt_1_1basic__snapshot__loader.html#aa55eeaad2ab4dd117524afff9d6e184b',1,'entt::basic_snapshot_loader::operator=()'],['../classentt_1_1basic__continuous__loader.html#afd396d84cb27e070a6a812bd28140c75',1,'entt::basic_continuous_loader::operator=()'],['../classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34',1,'entt::sparse_set::operator=(const sparse_set &other)'],['../classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa',1,'entt::sparse_set::operator=(sparse_set &&)=default'],['../classentt_1_1meta__any.html#acfb1ce537c6072aabb53662658213e04',1,'entt::meta_any::operator=(Type &&type)'],['../classentt_1_1meta__any.html#a97360c78351767409f9db58c9f785ad5',1,'entt::meta_any::operator=(const meta_any &other)'],['../classentt_1_1meta__any.html#a8fbda3a54404e9cf4787b5b212cf1185',1,'entt::meta_any::operator=(meta_any &&other) ENTT_NOEXCEPT'],['../classentt_1_1scheduler.html#aea6ab78dbf00ba17c6e828ee0505afd9',1,'entt::scheduler::operator=()'],['../structentt_1_1cache.html#a1f4136cd86ea31278c4eaad59112e8ff',1,'entt::cache::operator=()'],['../classentt_1_1emitter.html#ab270d2c6d986621a781467e29e64629c',1,'entt::emitter::operator=()'],['../classentt_1_1connection.html#a19e6c45b11cfcd0fef1e4c086f63e891',1,'entt::connection::operator=(const connection &)=default'],['../classentt_1_1connection.html#ad7dfbcc07f74bff317efcdf6988135fa',1,'entt::connection::operator=(connection &&other)'],['../structentt_1_1scoped__connection.html#ae079c45e0eb97f31ec1d5a4be76163fc',1,'entt::scoped_connection::operator=(const scoped_connection &)=delete'],['../structentt_1_1scoped__connection.html#a4cf8b6b0683310c58af3344077fd8e97',1,'entt::scoped_connection::operator=(scoped_connection &&)=default'],['../structentt_1_1scoped__connection.html#a51d7df995ac1dee40add9f80a351fdf5',1,'entt::scoped_connection::operator=(const connection &other)'],['../structentt_1_1scoped__connection.html#ab2b9858209560ac77b4cbed95ecd116d',1,'entt::scoped_connection::operator=(connection &&other)']]], + ['operator_3d_3d_210',['operator==',['../classentt_1_1basic__hashed__string.html#a51311d6903443296ce076536df2b46da',1,'entt::basic_hashed_string::operator==()'],['../classentt_1_1meta__any.html#a2673fdc066e710ce94cbb2f5c3994d42',1,'entt::meta_any::operator==()'],['../structentt_1_1meta__prop.html#adbcf1179374bab74c2be1f395078b89e',1,'entt::meta_prop::operator==()'],['../structentt_1_1meta__base.html#a6469955ac7550d5396cf185795c07a15',1,'entt::meta_base::operator==()'],['../structentt_1_1meta__conv.html#a176af5a8c4b2fae4dc1d862509705152',1,'entt::meta_conv::operator==()'],['../structentt_1_1meta__ctor.html#a49299869b3adc7a3a97dc9c9cf9617a8',1,'entt::meta_ctor::operator==()'],['../structentt_1_1meta__dtor.html#a55905a8daf9dafcdc33e38e1247b1e9d',1,'entt::meta_dtor::operator==()'],['../structentt_1_1meta__data.html#ac44372da54f317b93fec85570bb50cfc',1,'entt::meta_data::operator==()'],['../structentt_1_1meta__func.html#a4d29a2982e937d0dff5dac93434099a1',1,'entt::meta_func::operator==()'],['../classentt_1_1meta__type.html#a838362aa3598bfa4cc18041d3445bace',1,'entt::meta_type::operator==()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a54ca30c9a3f7a9662363c48db4e86aae',1,'entt::delegate< Ret(Args...)>::operator==()']]], + ['operator_5b_5d_211',['operator[]',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ad90a0721069352d895191a6c49240e38',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::operator[]()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ad3f79a1e2f300011eeb9b3420e56fccc',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::operator[]()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a9e4d4f3d6235b755765e1935d96f307e',1,'entt::basic_view< Entity, exclude_t<>, Component >::operator[]()']]], + ['orphan_212',['orphan',['../classentt_1_1basic__registry.html#a10f5e61d4cabab9e9c1e87edc30de551',1,'entt::basic_registry']]], + ['orphans_213',['orphans',['../classentt_1_1basic__registry.html#ae337ceb77e75c10c73ffa671e09bfff8',1,'entt::basic_registry::orphans()'],['../classentt_1_1basic__snapshot__loader.html#acd881016761f5eb598763fbf3595a625',1,'entt::basic_snapshot_loader::orphans()'],['../classentt_1_1basic__continuous__loader.html#ac8b328bb8c6c4acde51ab5b943f0ea86',1,'entt::basic_continuous_loader::orphans()']]], + ['overload_214',['overload',['../namespaceentt.html#ae289e7f5640bb43223901039346e5ce0',1,'entt::overload(Type Class::*member) ENTT_NOEXCEPT'],['../namespaceentt.html#a33de87747dbfdef2a916f290d4f66836',1,'entt::overload(Type *func) ENTT_NOEXCEPT']]], + ['overloaded_215',['overloaded',['../structentt_1_1overloaded.html',1,'entt::overloaded< Func >'],['../namespaceentt.html#a4f3131bbda45993bd35a9d07db09e777',1,'entt::overloaded(Type...) -> overloaded< Type... >']]] ]; diff --git a/search/all_e.html b/search/all_e.html index 9fa42bbac..293161891 100644 --- a/search/all_e.html +++ b/search/all_e.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_e.js b/search/all_e.js index bd46b0832..233a1e943 100644 --- a/search/all_e.js +++ b/search/all_e.js @@ -1,14 +1,14 @@ var searchData= [ - ['push_20entt_20across_20boundaries',['Push EnTT across boundaries',['../autotoc_md59.html',1,'']]], - ['parent',['parent',['../structentt_1_1meta__base.html#ad05e984d2cc36f64c0a64fe951e9cdce',1,'entt::meta_base::parent()'],['../structentt_1_1meta__conv.html#a6ca68ad1f28b7e410133f2fa902e2fd5',1,'entt::meta_conv::parent()'],['../structentt_1_1meta__ctor.html#a776c2812dd8724523fc881defb1116f2',1,'entt::meta_ctor::parent()'],['../structentt_1_1meta__dtor.html#ad5cf3129b534f5cb6f736a713f71e37e',1,'entt::meta_dtor::parent()'],['../structentt_1_1meta__data.html#af951f9f860512984d19c706ca3013fed',1,'entt::meta_data::parent()'],['../structentt_1_1meta__func.html#a63056a4d3f0a16c988d90162240fe74d',1,'entt::meta_func::parent()']]], - ['pause',['pause',['../classentt_1_1process.html#a9bf45a6c430f5e32fc7ab33a7a197abc',1,'entt::process']]], - ['paused',['paused',['../classentt_1_1process.html#a2c1c1f5ea78d3b2fc87cfcdbf7a1b40f',1,'entt::process']]], - ['prepare',['prepare',['../classentt_1_1basic__registry.html#aad398e6279c6bbee2068b94c74bf83d6',1,'entt::basic_registry']]], - ['process',['process',['../classentt_1_1process.html',1,'entt']]], - ['process_3c_20process_5fadaptor_3c_20func_2c_20delta_20_3e_2c_20delta_20_3e',['process< process_adaptor< Func, Delta >, Delta >',['../classentt_1_1process.html',1,'entt']]], - ['process_5fadaptor',['process_adaptor',['../structentt_1_1process__adaptor.html',1,'entt::process_adaptor< Func, Delta >'],['../structentt_1_1process__adaptor.html#ad1e2c8f3c44bf42abb05ef913b8267ce',1,'entt::process_adaptor::process_adaptor()']]], - ['prop',['prop',['../classentt_1_1extended__meta__factory.html#a67b4797a58215f0bff993a708be56c3d',1,'entt::extended_meta_factory::prop()'],['../structentt_1_1meta__ctor.html#ae63dd6567cc8ec0eb871ce253f49f6a7',1,'entt::meta_ctor::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__ctor.html#ab852dea70110981bc9cff4df1a6831ee',1,'entt::meta_ctor::prop(meta_any key) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#abffe3a3870ba6d7f05c953b7cea50a68',1,'entt::meta_data::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#a99b411ff9aba822bc52ebb8b5a43702a',1,'entt::meta_data::prop(meta_any key) const ENTT_NOEXCEPT'],['../structentt_1_1meta__func.html#a28d919188b186ad646b56e0fd1485fc6',1,'entt::meta_func::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__func.html#a58b6facbf66b9f4d9c23598e298de2b1',1,'entt::meta_func::prop(meta_any key) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a9da6947b4a4df64e23f81b3488fa7dff',1,'entt::meta_type::prop(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a5f7fa14c9999c3ede65278b41b543f12',1,'entt::meta_type::prop(meta_any key) const ENTT_NOEXCEPT']]], - ['props',['props',['../classentt_1_1extended__meta__factory.html#ad96aa7f041b17895a66b36e338d1451e',1,'entt::extended_meta_factory']]], - ['publish',['publish',['../classentt_1_1emitter.html#a4ece275ff8736bcdcfb4103087801ea2',1,'entt::emitter::publish()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a062abaa0969c6762616466b67bee5d7d',1,'entt::sigh< Ret(Args...)>::publish()']]] + ['push_20entt_20across_20boundaries_216',['Push EnTT across boundaries',['../md_docs_md_lib.html',1,'']]], + ['parent_217',['parent',['../structentt_1_1meta__base.html#ad05e984d2cc36f64c0a64fe951e9cdce',1,'entt::meta_base::parent()'],['../structentt_1_1meta__conv.html#a6ca68ad1f28b7e410133f2fa902e2fd5',1,'entt::meta_conv::parent()'],['../structentt_1_1meta__ctor.html#a776c2812dd8724523fc881defb1116f2',1,'entt::meta_ctor::parent()'],['../structentt_1_1meta__dtor.html#ad5cf3129b534f5cb6f736a713f71e37e',1,'entt::meta_dtor::parent()'],['../structentt_1_1meta__data.html#af951f9f860512984d19c706ca3013fed',1,'entt::meta_data::parent()'],['../structentt_1_1meta__func.html#a63056a4d3f0a16c988d90162240fe74d',1,'entt::meta_func::parent()']]], + ['pause_218',['pause',['../classentt_1_1process.html#a9bf45a6c430f5e32fc7ab33a7a197abc',1,'entt::process']]], + ['paused_219',['paused',['../classentt_1_1process.html#a2c1c1f5ea78d3b2fc87cfcdbf7a1b40f',1,'entt::process']]], + ['prepare_220',['prepare',['../classentt_1_1basic__registry.html#aad398e6279c6bbee2068b94c74bf83d6',1,'entt::basic_registry']]], + ['process_221',['process',['../classentt_1_1process.html',1,'entt']]], + ['process_3c_20process_5fadaptor_3c_20func_2c_20delta_20_3e_2c_20delta_20_3e_222',['process< process_adaptor< Func, Delta >, Delta >',['../classentt_1_1process.html',1,'entt']]], + ['process_5fadaptor_223',['process_adaptor',['../structentt_1_1process__adaptor.html',1,'entt::process_adaptor< Func, Delta >'],['../structentt_1_1process__adaptor.html#ad1e2c8f3c44bf42abb05ef913b8267ce',1,'entt::process_adaptor::process_adaptor()']]], + ['prop_224',['prop',['../classentt_1_1extended__meta__factory.html#a67b4797a58215f0bff993a708be56c3d',1,'entt::extended_meta_factory::prop()'],['../structentt_1_1meta__ctor.html#ae63dd6567cc8ec0eb871ce253f49f6a7',1,'entt::meta_ctor::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__ctor.html#ab852dea70110981bc9cff4df1a6831ee',1,'entt::meta_ctor::prop(meta_any key) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#abffe3a3870ba6d7f05c953b7cea50a68',1,'entt::meta_data::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#a99b411ff9aba822bc52ebb8b5a43702a',1,'entt::meta_data::prop(meta_any key) const ENTT_NOEXCEPT'],['../structentt_1_1meta__func.html#a28d919188b186ad646b56e0fd1485fc6',1,'entt::meta_func::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__func.html#a58b6facbf66b9f4d9c23598e298de2b1',1,'entt::meta_func::prop(meta_any key) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a9da6947b4a4df64e23f81b3488fa7dff',1,'entt::meta_type::prop(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a5f7fa14c9999c3ede65278b41b543f12',1,'entt::meta_type::prop(meta_any key) const ENTT_NOEXCEPT']]], + ['props_225',['props',['../classentt_1_1extended__meta__factory.html#ad96aa7f041b17895a66b36e338d1451e',1,'entt::extended_meta_factory']]], + ['publish_226',['publish',['../classentt_1_1emitter.html#a4ece275ff8736bcdcfb4103087801ea2',1,'entt::emitter::publish()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a062abaa0969c6762616466b67bee5d7d',1,'entt::sigh< Ret(Args...)>::publish()']]] ]; diff --git a/search/all_f.html b/search/all_f.html index 6ecfc0ed8..ca42a522f 100644 --- a/search/all_f.html +++ b/search/all_f.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/all_f.js b/search/all_f.js index aa6c5c266..cab0a025f 100644 --- a/search/all_f.js +++ b/search/all_f.js @@ -1,23 +1,23 @@ var searchData= [ - ['radix_5fsort',['radix_sort',['../structentt_1_1radix__sort.html',1,'entt']]], - ['raw',['raw',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a5be80cb2fc104116469c1fa65b992149',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::raw()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a945850dca5e5d13ae5be53eaf863ac38',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::raw()'],['../classentt_1_1basic__registry.html#aa0aa5dd120230aecd3b41474acbaecd2',1,'entt::basic_registry::raw() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a79751d793fe0f28e8f0e163e46638cb9',1,'entt::basic_registry::raw() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a8e38d136d24bb38ef96c02135549c5d8',1,'entt::basic_storage::raw() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ae7757471c65eca305d2b83b570571065',1,'entt::basic_storage::raw() ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a3642beed007b678deb694d92e4a8743d',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::raw()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#af0bd1c0efb41c883001d6fd21c975c0f',1,'entt::basic_view< Entity, exclude_t<>, Component >::raw()']]], - ['raw_5ftype',['raw_type',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8bd979c3e567bccfbc7a598442092d81',1,'entt::basic_view< Entity, exclude_t<>, Component >']]], - ['ref',['ref',['../structentt_1_1service__locator.html#ae24d16726620af40371fadeddf5b5e2e',1,'entt::service_locator']]], - ['registry',['registry',['../namespaceentt.html#a292643317d1dbb13e45824f757bd1086',1,'entt']]], - ['registry_5ftype',['registry_type',['../structentt_1_1basic__actor.html#a4577b087e2fe3e76dbd4516ae9064c6a',1,'entt::basic_actor::registry_type()'],['../structentt_1_1as__view.html#a458942b049c7ef96d45600337d57a70b',1,'entt::as_view::registry_type()'],['../structentt_1_1as__group.html#a7ede36514bf64187bc93d3d295fe0123',1,'entt::as_group::registry_type()']]], - ['rejected',['rejected',['../classentt_1_1process.html#a6ac63863bf823806d813b046769b4419',1,'entt::process']]], - ['release',['release',['../classentt_1_1connection.html#ae564477ab623301169916c1992c970a8',1,'entt::connection']]], - ['reload',['reload',['../structentt_1_1cache.html#a138c981b9e2d139c40adc4c662f3ab26',1,'entt::cache']]], - ['remove',['remove',['../structentt_1_1basic__actor.html#ab740844d18ada7ad15988f808617a1a1',1,'entt::basic_actor::remove()'],['../classentt_1_1basic__registry.html#a44f5eac6fa4d1999a121f55e67a36c24',1,'entt::basic_registry::remove()']]], - ['remove_5fextent',['remove_extent',['../classentt_1_1meta__type.html#a1cee84bcd77ef63480c84dba5c959f2b',1,'entt::meta_type']]], - ['remove_5fpointer',['remove_pointer',['../classentt_1_1meta__type.html#a89df1ddbee0b5aef2651f1fc712ada20',1,'entt::meta_type']]], - ['replace',['replace',['../structentt_1_1basic__collector_3_4.html#a634ac3a53ee686d7fb7121404b14c17e',1,'entt::basic_collector<>::replace()'],['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#a29c88a0f4e74f7e93d7ae7d08326a5b5',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >::replace()'],['../classentt_1_1basic__registry.html#a0411735fcddcc942613463c5401dd661',1,'entt::basic_registry::replace()']]], - ['reserve',['reserve',['../classentt_1_1basic__registry.html#a632adf32f7b23f1dae8bf4f8800a0bbe',1,'entt::basic_registry::reserve()'],['../classentt_1_1sparse__set.html#a8b4b9dd989877bc333fdc455fcd068d7',1,'entt::sparse_set::reserve()'],['../classentt_1_1basic__storage.html#a8f2a2a968a241832acc338b8dca2f744',1,'entt::basic_storage::reserve()']]], - ['reset',['reset',['../classentt_1_1basic__registry.html#a95dd0483f9839dfbce8af5ed120b94c2',1,'entt::basic_registry::reset(const entity_type entity)'],['../classentt_1_1basic__registry.html#ac5b546f2508b2a10a6f1d8c77db12837',1,'entt::basic_registry::reset()'],['../classentt_1_1basic__registry.html#a38a7c3696f749d0e873374086c3c0f88',1,'entt::basic_registry::reset()'],['../classentt_1_1sparse__set.html#abcf1b927ccc18fba0fef178d168c1fa7',1,'entt::sparse_set::reset()'],['../classentt_1_1basic__storage.html#a1ed587372f7bcf15ab0d17397c2dad81',1,'entt::basic_storage::reset()'],['../structentt_1_1service__locator.html#a4d655acab54d87058ad41a266830d0e8',1,'entt::service_locator::reset()'],['../classentt_1_1meta__factory.html#a795ae5cd4fd7772256442e598421649f',1,'entt::meta_factory::reset()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a0d81bb1bde6abd78914cd0a07084bcd7',1,'entt::delegate< Ret(Args...)>::reset()']]], - ['resolve',['resolve',['../namespaceentt.html#a2129cb8668f5dcbc11854be6a4a0b6e5',1,'entt::resolve() ENTT_NOEXCEPT'],['../namespaceentt.html#afd2ff81413fa0bda15d1c0b69497cf62',1,'entt::resolve(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../namespaceentt.html#af04a0a841795917ea4d906981bee83b7',1,'entt::resolve(Op op) ENTT_NOEXCEPT']]], - ['resource_5ftype',['resource_type',['../structentt_1_1cache.html#ada5e8c7f595aed30fa4f879fe71e7baf',1,'entt::cache']]], - ['respect',['respect',['../classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6',1,'entt::sparse_set']]], - ['ret',['ret',['../structentt_1_1meta__func.html#a6a1bfe7f9b2e8c833dbfb5dff75bf1e9',1,'entt::meta_func']]], - ['runtime_5fview',['runtime_view',['../classentt_1_1basic__registry.html#af1f17548d9527797e366f610e9de36f6',1,'entt::basic_registry::runtime_view()'],['../namespaceentt.html#a85d470a55d982d87388e899c322e9ddc',1,'entt::runtime_view()']]] + ['radix_5fsort_227',['radix_sort',['../structentt_1_1radix__sort.html',1,'entt']]], + ['raw_228',['raw',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a5be80cb2fc104116469c1fa65b992149',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::raw()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a945850dca5e5d13ae5be53eaf863ac38',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::raw()'],['../classentt_1_1basic__registry.html#aa0aa5dd120230aecd3b41474acbaecd2',1,'entt::basic_registry::raw() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a79751d793fe0f28e8f0e163e46638cb9',1,'entt::basic_registry::raw() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a8e38d136d24bb38ef96c02135549c5d8',1,'entt::basic_storage::raw() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ae7757471c65eca305d2b83b570571065',1,'entt::basic_storage::raw() ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a3642beed007b678deb694d92e4a8743d',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::raw()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#af0bd1c0efb41c883001d6fd21c975c0f',1,'entt::basic_view< Entity, exclude_t<>, Component >::raw()']]], + ['raw_5ftype_229',['raw_type',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8bd979c3e567bccfbc7a598442092d81',1,'entt::basic_view< Entity, exclude_t<>, Component >']]], + ['ref_230',['ref',['../structentt_1_1service__locator.html#ae24d16726620af40371fadeddf5b5e2e',1,'entt::service_locator']]], + ['registry_231',['registry',['../namespaceentt.html#a292643317d1dbb13e45824f757bd1086',1,'entt']]], + ['registry_5ftype_232',['registry_type',['../structentt_1_1basic__actor.html#a4577b087e2fe3e76dbd4516ae9064c6a',1,'entt::basic_actor::registry_type()'],['../structentt_1_1as__view.html#a458942b049c7ef96d45600337d57a70b',1,'entt::as_view::registry_type()'],['../structentt_1_1as__group.html#a7ede36514bf64187bc93d3d295fe0123',1,'entt::as_group::registry_type()']]], + ['rejected_233',['rejected',['../classentt_1_1process.html#a6ac63863bf823806d813b046769b4419',1,'entt::process']]], + ['release_234',['release',['../classentt_1_1connection.html#ae564477ab623301169916c1992c970a8',1,'entt::connection']]], + ['reload_235',['reload',['../structentt_1_1cache.html#a138c981b9e2d139c40adc4c662f3ab26',1,'entt::cache']]], + ['remove_236',['remove',['../structentt_1_1basic__actor.html#ab740844d18ada7ad15988f808617a1a1',1,'entt::basic_actor::remove()'],['../classentt_1_1basic__registry.html#a44f5eac6fa4d1999a121f55e67a36c24',1,'entt::basic_registry::remove()']]], + ['remove_5fextent_237',['remove_extent',['../classentt_1_1meta__type.html#a1cee84bcd77ef63480c84dba5c959f2b',1,'entt::meta_type']]], + ['remove_5fpointer_238',['remove_pointer',['../classentt_1_1meta__type.html#a89df1ddbee0b5aef2651f1fc712ada20',1,'entt::meta_type']]], + ['replace_239',['replace',['../structentt_1_1basic__collector_3_4.html#a634ac3a53ee686d7fb7121404b14c17e',1,'entt::basic_collector<>::replace()'],['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#a29c88a0f4e74f7e93d7ae7d08326a5b5',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >::replace()'],['../classentt_1_1basic__registry.html#a0411735fcddcc942613463c5401dd661',1,'entt::basic_registry::replace()']]], + ['reserve_240',['reserve',['../classentt_1_1basic__registry.html#a632adf32f7b23f1dae8bf4f8800a0bbe',1,'entt::basic_registry::reserve()'],['../classentt_1_1sparse__set.html#a8b4b9dd989877bc333fdc455fcd068d7',1,'entt::sparse_set::reserve()'],['../classentt_1_1basic__storage.html#a8f2a2a968a241832acc338b8dca2f744',1,'entt::basic_storage::reserve()']]], + ['reset_241',['reset',['../classentt_1_1basic__registry.html#a95dd0483f9839dfbce8af5ed120b94c2',1,'entt::basic_registry::reset(const entity_type entity)'],['../classentt_1_1basic__registry.html#ac5b546f2508b2a10a6f1d8c77db12837',1,'entt::basic_registry::reset()'],['../classentt_1_1basic__registry.html#a38a7c3696f749d0e873374086c3c0f88',1,'entt::basic_registry::reset()'],['../classentt_1_1sparse__set.html#abcf1b927ccc18fba0fef178d168c1fa7',1,'entt::sparse_set::reset()'],['../classentt_1_1basic__storage.html#a1ed587372f7bcf15ab0d17397c2dad81',1,'entt::basic_storage::reset()'],['../structentt_1_1service__locator.html#a4d655acab54d87058ad41a266830d0e8',1,'entt::service_locator::reset()'],['../classentt_1_1meta__factory.html#a795ae5cd4fd7772256442e598421649f',1,'entt::meta_factory::reset()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a0d81bb1bde6abd78914cd0a07084bcd7',1,'entt::delegate< Ret(Args...)>::reset()']]], + ['resolve_242',['resolve',['../namespaceentt.html#a2129cb8668f5dcbc11854be6a4a0b6e5',1,'entt::resolve() ENTT_NOEXCEPT'],['../namespaceentt.html#afd2ff81413fa0bda15d1c0b69497cf62',1,'entt::resolve(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../namespaceentt.html#af04a0a841795917ea4d906981bee83b7',1,'entt::resolve(Op op) ENTT_NOEXCEPT']]], + ['resource_5ftype_243',['resource_type',['../structentt_1_1cache.html#ada5e8c7f595aed30fa4f879fe71e7baf',1,'entt::cache']]], + ['respect_244',['respect',['../classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6',1,'entt::sparse_set']]], + ['ret_245',['ret',['../structentt_1_1meta__func.html#a6a1bfe7f9b2e8c833dbfb5dff75bf1e9',1,'entt::meta_func']]], + ['runtime_5fview_246',['runtime_view',['../classentt_1_1basic__registry.html#af1f17548d9527797e366f610e9de36f6',1,'entt::basic_registry::runtime_view()'],['../namespaceentt.html#a85d470a55d982d87388e899c322e9ddc',1,'entt::runtime_view()']]] ]; diff --git a/search/classes_0.html b/search/classes_0.html index 1c3e406ac..d585e6a9b 100644 --- a/search/classes_0.html +++ b/search/classes_0.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_0.js b/search/classes_0.js index da03e4446..38577dc89 100644 --- a/search/classes_0.js +++ b/search/classes_0.js @@ -1,8 +1,8 @@ var searchData= [ - ['as_5falias_5ft',['as_alias_t',['../structentt_1_1as__alias__t.html',1,'entt']]], - ['as_5fgroup',['as_group',['../structentt_1_1as__group.html',1,'entt']]], - ['as_5fis_5ft',['as_is_t',['../structentt_1_1as__is__t.html',1,'entt']]], - ['as_5fview',['as_view',['../structentt_1_1as__view.html',1,'entt']]], - ['as_5fvoid_5ft',['as_void_t',['../structentt_1_1as__void__t.html',1,'entt']]] + ['as_5falias_5ft_320',['as_alias_t',['../structentt_1_1as__alias__t.html',1,'entt']]], + ['as_5fgroup_321',['as_group',['../structentt_1_1as__group.html',1,'entt']]], + ['as_5fis_5ft_322',['as_is_t',['../structentt_1_1as__is__t.html',1,'entt']]], + ['as_5fview_323',['as_view',['../structentt_1_1as__view.html',1,'entt']]], + ['as_5fvoid_5ft_324',['as_void_t',['../structentt_1_1as__void__t.html',1,'entt']]] ]; diff --git a/search/classes_1.html b/search/classes_1.html index a8e706950..baeb182b5 100644 --- a/search/classes_1.html +++ b/search/classes_1.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_1.js b/search/classes_1.js index 679a25618..73b641ce7 100644 --- a/search/classes_1.js +++ b/search/classes_1.js @@ -1,26 +1,26 @@ var searchData= [ - ['basic_5factor',['basic_actor',['../structentt_1_1basic__actor.html',1,'entt']]], - ['basic_5fcollector',['basic_collector',['../structentt_1_1basic__collector.html',1,'entt']]], - ['basic_5fcollector_3c_20matcher_3c_20type_5flist_3c_20reject_2e_2e_2e_20_3e_2c_20type_5flist_3c_20require_2e_2e_2e_20_3e_2c_20rule_2e_2e_2e_20_3e_2c_20other_2e_2e_2e_20_3e',['basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html',1,'entt']]], - ['basic_5fcollector_3c_3e',['basic_collector<>',['../structentt_1_1basic__collector_3_4.html',1,'entt']]], - ['basic_5fcontinuous_5floader',['basic_continuous_loader',['../classentt_1_1basic__continuous__loader.html',1,'entt']]], - ['basic_5fgroup',['basic_group',['../classentt_1_1basic__group.html',1,'entt']]], - ['basic_5fgroup_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20get_5ft_3c_20get_2e_2e_2e_20_3e_20_3e',['basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html',1,'entt']]], - ['basic_5fgroup_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20get_5ft_3c_20get_2e_2e_2e_20_3e_2c_20owned_2e_2e_2e_20_3e',['basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html',1,'entt']]], - ['basic_5fhashed_5fstring',['basic_hashed_string',['../classentt_1_1basic__hashed__string.html',1,'entt']]], - ['basic_5fobserver',['basic_observer',['../classentt_1_1basic__observer.html',1,'entt']]], - ['basic_5fregistry',['basic_registry',['../classentt_1_1basic__registry.html',1,'entt']]], - ['basic_5fregistry_3c_20entity_5ftype_20_3e',['basic_registry< entity_type >',['../classentt_1_1basic__registry.html',1,'entt']]], - ['basic_5fruntime_5fview',['basic_runtime_view',['../classentt_1_1basic__runtime__view.html',1,'entt']]], - ['basic_5fsnapshot',['basic_snapshot',['../classentt_1_1basic__snapshot.html',1,'entt']]], - ['basic_5fsnapshot_5floader',['basic_snapshot_loader',['../classentt_1_1basic__snapshot__loader.html',1,'entt']]], - ['basic_5fstorage',['basic_storage',['../classentt_1_1basic__storage.html',1,'entt']]], - ['basic_5fstorage_3c_20entity_2c_20component_20_3e',['basic_storage< Entity, Component >',['../classentt_1_1basic__storage.html',1,'entt']]], - ['basic_5fstorage_3c_20entity_2c_20type_20_3e',['basic_storage< Entity, Type >',['../classentt_1_1basic__storage.html',1,'entt']]], - ['basic_5fstorage_3c_20entity_2c_20type_2c_20std_3a_3aenable_5fif_5ft_3c_20entt_5fenable_5feto_28type_29_3e_20_3e',['basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >',['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html',1,'entt']]], - ['basic_5fstorage_3c_20entity_5ftype_2c_20payload_5ftype_20_3e',['basic_storage< entity_type, payload_type >',['../classentt_1_1basic__storage.html',1,'entt']]], - ['basic_5fview',['basic_view',['../classentt_1_1basic__view.html',1,'entt']]], - ['basic_5fview_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20component_2e_2e_2e_20_3e',['basic_view< Entity, exclude_t< Exclude... >, Component... >',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html',1,'entt']]], - ['basic_5fview_3c_20entity_2c_20exclude_5ft_3c_3e_2c_20component_20_3e',['basic_view< Entity, exclude_t<>, Component >',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html',1,'entt']]] + ['basic_5factor_325',['basic_actor',['../structentt_1_1basic__actor.html',1,'entt']]], + ['basic_5fcollector_326',['basic_collector',['../structentt_1_1basic__collector.html',1,'entt']]], + ['basic_5fcollector_3c_20matcher_3c_20type_5flist_3c_20reject_2e_2e_2e_20_3e_2c_20type_5flist_3c_20require_2e_2e_2e_20_3e_2c_20rule_2e_2e_2e_20_3e_2c_20other_2e_2e_2e_20_3e_327',['basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html',1,'entt']]], + ['basic_5fcollector_3c_3e_328',['basic_collector<>',['../structentt_1_1basic__collector_3_4.html',1,'entt']]], + ['basic_5fcontinuous_5floader_329',['basic_continuous_loader',['../classentt_1_1basic__continuous__loader.html',1,'entt']]], + ['basic_5fgroup_330',['basic_group',['../classentt_1_1basic__group.html',1,'entt']]], + ['basic_5fgroup_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20get_5ft_3c_20get_2e_2e_2e_20_3e_20_3e_331',['basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html',1,'entt']]], + ['basic_5fgroup_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20get_5ft_3c_20get_2e_2e_2e_20_3e_2c_20owned_2e_2e_2e_20_3e_332',['basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html',1,'entt']]], + ['basic_5fhashed_5fstring_333',['basic_hashed_string',['../classentt_1_1basic__hashed__string.html',1,'entt']]], + ['basic_5fobserver_334',['basic_observer',['../classentt_1_1basic__observer.html',1,'entt']]], + ['basic_5fregistry_335',['basic_registry',['../classentt_1_1basic__registry.html',1,'entt']]], + ['basic_5fregistry_3c_20entity_5ftype_20_3e_336',['basic_registry< entity_type >',['../classentt_1_1basic__registry.html',1,'entt']]], + ['basic_5fruntime_5fview_337',['basic_runtime_view',['../classentt_1_1basic__runtime__view.html',1,'entt']]], + ['basic_5fsnapshot_338',['basic_snapshot',['../classentt_1_1basic__snapshot.html',1,'entt']]], + ['basic_5fsnapshot_5floader_339',['basic_snapshot_loader',['../classentt_1_1basic__snapshot__loader.html',1,'entt']]], + ['basic_5fstorage_340',['basic_storage',['../classentt_1_1basic__storage.html',1,'entt']]], + ['basic_5fstorage_3c_20entity_2c_20component_20_3e_341',['basic_storage< Entity, Component >',['../classentt_1_1basic__storage.html',1,'entt']]], + ['basic_5fstorage_3c_20entity_2c_20type_20_3e_342',['basic_storage< Entity, Type >',['../classentt_1_1basic__storage.html',1,'entt']]], + ['basic_5fstorage_3c_20entity_2c_20type_2c_20std_3a_3aenable_5fif_5ft_3c_20entt_5fenable_5feto_28type_29_3e_20_3e_343',['basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >',['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html',1,'entt']]], + ['basic_5fstorage_3c_20entity_5ftype_2c_20payload_5ftype_20_3e_344',['basic_storage< entity_type, payload_type >',['../classentt_1_1basic__storage.html',1,'entt']]], + ['basic_5fview_345',['basic_view',['../classentt_1_1basic__view.html',1,'entt']]], + ['basic_5fview_3c_20entity_2c_20exclude_5ft_3c_20exclude_2e_2e_2e_20_3e_2c_20component_2e_2e_2e_20_3e_346',['basic_view< Entity, exclude_t< Exclude... >, Component... >',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html',1,'entt']]], + ['basic_5fview_3c_20entity_2c_20exclude_5ft_3c_3e_2c_20component_20_3e_347',['basic_view< Entity, exclude_t<>, Component >',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html',1,'entt']]] ]; diff --git a/search/classes_10.html b/search/classes_10.html index c1a935570..c07b3dd7b 100644 --- a/search/classes_10.html +++ b/search/classes_10.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_10.js b/search/classes_10.js index 2ee1b8eb9..7fc4a913f 100644 --- a/search/classes_10.js +++ b/search/classes_10.js @@ -1,14 +1,14 @@ var searchData= [ - ['type_5flist',['type_list',['../structentt_1_1type__list.html',1,'entt']]], - ['type_5flist_3c_20type_2e_2e_2e_20_3e',['type_list< Type... >',['../structentt_1_1type__list.html',1,'entt']]], - ['type_5flist_5fcat',['type_list_cat',['../structentt_1_1type__list__cat.html',1,'entt']]], - ['type_5flist_5fcat_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_20_3e',['type_list_cat< type_list< Type... > >',['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_01_4.html',1,'entt']]], - ['type_5flist_5fcat_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_2c_20type_5flist_3c_20other_2e_2e_2e_20_3e_2c_20list_2e_2e_2e_20_3e',['type_list_cat< type_list< Type... >, type_list< Other... >, List... >',['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_00_01type__list_3_01Other_8_8_8_01_4_00_01List_8_8_8_01_4.html',1,'entt']]], - ['type_5flist_5fcat_3c_3e',['type_list_cat<>',['../structentt_1_1type__list__cat_3_4.html',1,'entt']]], - ['type_5flist_5fsize',['type_list_size',['../structentt_1_1type__list__size.html',1,'entt']]], - ['type_5flist_5fsize_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_20_3e',['type_list_size< type_list< Type... > >',['../structentt_1_1type__list__size_3_01type__list_3_01Type_8_8_8_01_4_01_4.html',1,'entt']]], - ['type_5flist_5funique',['type_list_unique',['../structentt_1_1type__list__unique.html',1,'entt']]], - ['type_5flist_5funique_3c_20type_5flist_3c_20type_2c_20other_2e_2e_2e_20_3e_20_3e',['type_list_unique< type_list< Type, Other... > >',['../structentt_1_1type__list__unique_3_01type__list_3_01Type_00_01Other_8_8_8_01_4_01_4.html',1,'entt']]], - ['type_5flist_5funique_3c_20type_5flist_3c_3e_20_3e',['type_list_unique< type_list<> >',['../structentt_1_1type__list__unique_3_01type__list_3_4_01_4.html',1,'entt']]] + ['type_5flist_413',['type_list',['../structentt_1_1type__list.html',1,'entt']]], + ['type_5flist_3c_20type_2e_2e_2e_20_3e_414',['type_list< Type... >',['../structentt_1_1type__list.html',1,'entt']]], + ['type_5flist_5fcat_415',['type_list_cat',['../structentt_1_1type__list__cat.html',1,'entt']]], + ['type_5flist_5fcat_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_20_3e_416',['type_list_cat< type_list< Type... > >',['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_01_4.html',1,'entt']]], + ['type_5flist_5fcat_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_2c_20type_5flist_3c_20other_2e_2e_2e_20_3e_2c_20list_2e_2e_2e_20_3e_417',['type_list_cat< type_list< Type... >, type_list< Other... >, List... >',['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_00_01type__list_3_01Other_8_8_8_01_4_00_01List_8_8_8_01_4.html',1,'entt']]], + ['type_5flist_5fcat_3c_3e_418',['type_list_cat<>',['../structentt_1_1type__list__cat_3_4.html',1,'entt']]], + ['type_5flist_5fsize_419',['type_list_size',['../structentt_1_1type__list__size.html',1,'entt']]], + ['type_5flist_5fsize_3c_20type_5flist_3c_20type_2e_2e_2e_20_3e_20_3e_420',['type_list_size< type_list< Type... > >',['../structentt_1_1type__list__size_3_01type__list_3_01Type_8_8_8_01_4_01_4.html',1,'entt']]], + ['type_5flist_5funique_421',['type_list_unique',['../structentt_1_1type__list__unique.html',1,'entt']]], + ['type_5flist_5funique_3c_20type_5flist_3c_20type_2c_20other_2e_2e_2e_20_3e_20_3e_422',['type_list_unique< type_list< Type, Other... > >',['../structentt_1_1type__list__unique_3_01type__list_3_01Type_00_01Other_8_8_8_01_4_01_4.html',1,'entt']]], + ['type_5flist_5funique_3c_20type_5flist_3c_3e_20_3e_423',['type_list_unique< type_list<> >',['../structentt_1_1type__list__unique_3_01type__list_3_4_01_4.html',1,'entt']]] ]; diff --git a/search/classes_11.html b/search/classes_11.html index 2df8ed332..b2eb6a90f 100644 --- a/search/classes_11.html +++ b/search/classes_11.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_11.js b/search/classes_11.js index 2384d7cb4..6430c56f9 100644 --- a/search/classes_11.js +++ b/search/classes_11.js @@ -1,4 +1,4 @@ var searchData= [ - ['y_5fcombinator',['y_combinator',['../structentt_1_1y__combinator.html',1,'entt']]] + ['y_5fcombinator_424',['y_combinator',['../structentt_1_1y__combinator.html',1,'entt']]] ]; diff --git a/search/classes_2.html b/search/classes_2.html index 5c09c9691..d2672790c 100644 --- a/search/classes_2.html +++ b/search/classes_2.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_2.js b/search/classes_2.js index e52f08fd6..c4d43c348 100644 --- a/search/classes_2.js +++ b/search/classes_2.js @@ -1,8 +1,8 @@ var searchData= [ - ['cache',['cache',['../structentt_1_1cache.html',1,'entt']]], - ['choice_5ft',['choice_t',['../structentt_1_1choice__t.html',1,'entt']]], - ['choice_5ft_3c_200_20_3e',['choice_t< 0 >',['../structentt_1_1choice__t_3_010_01_4.html',1,'entt']]], - ['connect_5farg_5ft',['connect_arg_t',['../structentt_1_1connect__arg__t.html',1,'entt']]], - ['connection',['connection',['../structentt_1_1emitter_1_1connection.html',1,'entt::emitter< Derived >::connection< Event >'],['../classentt_1_1connection.html',1,'entt::connection']]] + ['cache_348',['cache',['../structentt_1_1cache.html',1,'entt']]], + ['choice_5ft_349',['choice_t',['../structentt_1_1choice__t.html',1,'entt']]], + ['choice_5ft_3c_200_20_3e_350',['choice_t< 0 >',['../structentt_1_1choice__t_3_010_01_4.html',1,'entt']]], + ['connect_5farg_5ft_351',['connect_arg_t',['../structentt_1_1connect__arg__t.html',1,'entt']]], + ['connection_352',['connection',['../structentt_1_1emitter_1_1connection.html',1,'entt::emitter< Derived >::connection< Event >'],['../classentt_1_1connection.html',1,'entt::connection']]] ]; diff --git a/search/classes_3.html b/search/classes_3.html index 5faaeba81..8a5cbe171 100644 --- a/search/classes_3.html +++ b/search/classes_3.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_3.js b/search/classes_3.js index 9109c547f..1805e1714 100644 --- a/search/classes_3.js +++ b/search/classes_3.js @@ -1,7 +1,7 @@ var searchData= [ - ['delegate',['delegate',['../classentt_1_1delegate.html',1,'entt']]], - ['delegate_3c_20ret_28args_2e_2e_2e_29_3e',['delegate< Ret(Args...)>',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html',1,'entt']]], - ['delegate_3c_20void_28void_20_2a_29_3e',['delegate< void(void *)>',['../classentt_1_1delegate.html',1,'entt']]], - ['dispatcher',['dispatcher',['../classentt_1_1dispatcher.html',1,'entt']]] + ['delegate_353',['delegate',['../classentt_1_1delegate.html',1,'entt']]], + ['delegate_3c_20ret_28args_2e_2e_2e_29_3e_354',['delegate< Ret(Args...)>',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html',1,'entt']]], + ['delegate_3c_20void_28void_20_2a_29_3e_355',['delegate< void(void *)>',['../classentt_1_1delegate.html',1,'entt']]], + ['dispatcher_356',['dispatcher',['../classentt_1_1dispatcher.html',1,'entt']]] ]; diff --git a/search/classes_4.html b/search/classes_4.html index b3f11bc78..300b9abac 100644 --- a/search/classes_4.html +++ b/search/classes_4.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_4.js b/search/classes_4.js index 4e87b6864..5b63f9cfb 100644 --- a/search/classes_4.js +++ b/search/classes_4.js @@ -1,10 +1,10 @@ var searchData= [ - ['emitter',['emitter',['../classentt_1_1emitter.html',1,'entt']]], - ['entt_5ftraits',['entt_traits',['../structentt_1_1entt__traits.html',1,'entt']]], - ['entt_5ftraits_3c_20std_3a_3auint16_5ft_20_3e',['entt_traits< std::uint16_t >',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html',1,'entt']]], - ['entt_5ftraits_3c_20std_3a_3auint32_5ft_20_3e',['entt_traits< std::uint32_t >',['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html',1,'entt']]], - ['entt_5ftraits_3c_20std_3a_3auint64_5ft_20_3e',['entt_traits< std::uint64_t >',['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html',1,'entt']]], - ['exclude_5ft',['exclude_t',['../structentt_1_1exclude__t.html',1,'entt']]], - ['extended_5fmeta_5ffactory',['extended_meta_factory',['../classentt_1_1extended__meta__factory.html',1,'entt']]] + ['emitter_357',['emitter',['../classentt_1_1emitter.html',1,'entt']]], + ['entt_5ftraits_358',['entt_traits',['../structentt_1_1entt__traits.html',1,'entt']]], + ['entt_5ftraits_3c_20std_3a_3auint16_5ft_20_3e_359',['entt_traits< std::uint16_t >',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html',1,'entt']]], + ['entt_5ftraits_3c_20std_3a_3auint32_5ft_20_3e_360',['entt_traits< std::uint32_t >',['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html',1,'entt']]], + ['entt_5ftraits_3c_20std_3a_3auint64_5ft_20_3e_361',['entt_traits< std::uint64_t >',['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html',1,'entt']]], + ['exclude_5ft_362',['exclude_t',['../structentt_1_1exclude__t.html',1,'entt']]], + ['extended_5fmeta_5ffactory_363',['extended_meta_factory',['../classentt_1_1extended__meta__factory.html',1,'entt']]] ]; diff --git a/search/classes_5.html b/search/classes_5.html index 952ace6f4..e7afb2c3a 100644 --- a/search/classes_5.html +++ b/search/classes_5.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_5.js b/search/classes_5.js index c9c7a62ef..7a89ddf29 100644 --- a/search/classes_5.js +++ b/search/classes_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['family',['family',['../classentt_1_1family.html',1,'entt']]] + ['family_364',['family',['../classentt_1_1family.html',1,'entt']]] ]; diff --git a/search/classes_6.html b/search/classes_6.html index 75eef9f42..f397fd5a5 100644 --- a/search/classes_6.html +++ b/search/classes_6.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_6.js b/search/classes_6.js index d7631695f..3b92ff5e0 100644 --- a/search/classes_6.js +++ b/search/classes_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['get_5ft',['get_t',['../structentt_1_1get__t.html',1,'entt']]] + ['get_5ft_365',['get_t',['../structentt_1_1get__t.html',1,'entt']]] ]; diff --git a/search/classes_7.html b/search/classes_7.html index 745f5f282..6453cb7fe 100644 --- a/search/classes_7.html +++ b/search/classes_7.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_7.js b/search/classes_7.js index f864dca86..52a9b0ce0 100644 --- a/search/classes_7.js +++ b/search/classes_7.js @@ -1,4 +1,4 @@ var searchData= [ - ['handle',['handle',['../classentt_1_1handle.html',1,'entt']]] + ['handle_366',['handle',['../classentt_1_1handle.html',1,'entt']]] ]; diff --git a/search/classes_8.html b/search/classes_8.html index 5a443d9d5..f2f78e9fc 100644 --- a/search/classes_8.html +++ b/search/classes_8.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_8.js b/search/classes_8.js index 8da29aad9..df4dc2c12 100644 --- a/search/classes_8.js +++ b/search/classes_8.js @@ -1,10 +1,10 @@ var searchData= [ - ['identifier',['identifier',['../classentt_1_1identifier.html',1,'entt']]], - ['identity',['identity',['../structentt_1_1identity.html',1,'entt']]], - ['insertion_5fsort',['insertion_sort',['../structentt_1_1insertion__sort.html',1,'entt']]], - ['is_5fequality_5fcomparable',['is_equality_comparable',['../structentt_1_1is__equality__comparable.html',1,'entt']]], - ['is_5fequality_5fcomparable_3c_20type_2c_20std_3a_3avoid_5ft_3c_20decltype_28std_3a_3adeclval_3c_20type_20_3e_28_29_3d_3dstd_3a_3adeclval_3c_20type_20_3e_28_29_29_3e_20_3e',['is_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> >',['../structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva22225425f92ebe2943dca66f125cfda1.html',1,'entt']]], - ['is_5fnamed_5ftype',['is_named_type',['../structentt_1_1is__named__type.html',1,'entt']]], - ['is_5fnamed_5ftype_3c_20type_2c_20std_3a_3avoid_5ft_3c_20named_5ftype_5ftraits_5ft_3c_20std_3a_3adecay_5ft_3c_20type_20_3e_20_3e_20_3e_20_3e',['is_named_type< Type, std::void_t< named_type_traits_t< std::decay_t< Type > > > >',['../structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_268fa5a871b2de95e24d77c0786df19e.html',1,'entt']]] + ['identifier_367',['identifier',['../classentt_1_1identifier.html',1,'entt']]], + ['identity_368',['identity',['../structentt_1_1identity.html',1,'entt']]], + ['insertion_5fsort_369',['insertion_sort',['../structentt_1_1insertion__sort.html',1,'entt']]], + ['is_5fequality_5fcomparable_370',['is_equality_comparable',['../structentt_1_1is__equality__comparable.html',1,'entt']]], + ['is_5fequality_5fcomparable_3c_20type_2c_20std_3a_3avoid_5ft_3c_20decltype_28std_3a_3adeclval_3c_20type_20_3e_28_29_3d_3dstd_3a_3adeclval_3c_20type_20_3e_28_29_29_3e_20_3e_371',['is_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> >',['../structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva46aebf4c20f38cbd0108d1e297595736.html',1,'entt']]], + ['is_5fnamed_5ftype_372',['is_named_type',['../structentt_1_1is__named__type.html',1,'entt']]], + ['is_5fnamed_5ftype_3c_20type_2c_20std_3a_3avoid_5ft_3c_20named_5ftype_5ftraits_5ft_3c_20std_3a_3adecay_5ft_3c_20type_20_3e_20_3e_20_3e_20_3e_373',['is_named_type< Type, std::void_t< named_type_traits_t< std::decay_t< Type > > > >',['../structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_268fa5a871b2de95e24d77c0786df19e.html',1,'entt']]] ]; diff --git a/search/classes_9.html b/search/classes_9.html index 9cb55be44..e4e148f03 100644 --- a/search/classes_9.html +++ b/search/classes_9.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_9.js b/search/classes_9.js index f72f576b5..8fe57a5d9 100644 --- a/search/classes_9.js +++ b/search/classes_9.js @@ -1,4 +1,4 @@ var searchData= [ - ['loader',['loader',['../classentt_1_1loader.html',1,'entt']]] + ['loader_374',['loader',['../classentt_1_1loader.html',1,'entt']]] ]; diff --git a/search/classes_a.html b/search/classes_a.html index 54940d78f..157ebcb74 100644 --- a/search/classes_a.html +++ b/search/classes_a.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_a.js b/search/classes_a.js index 0131cf1d2..241840a97 100644 --- a/search/classes_a.js +++ b/search/classes_a.js @@ -1,17 +1,17 @@ var searchData= [ - ['matcher',['matcher',['../structentt_1_1matcher.html',1,'entt']]], - ['meta_5fany',['meta_any',['../classentt_1_1meta__any.html',1,'entt']]], - ['meta_5fbase',['meta_base',['../structentt_1_1meta__base.html',1,'entt']]], - ['meta_5fconv',['meta_conv',['../structentt_1_1meta__conv.html',1,'entt']]], - ['meta_5fctor',['meta_ctor',['../structentt_1_1meta__ctor.html',1,'entt']]], - ['meta_5fctx',['meta_ctx',['../structentt_1_1meta__ctx.html',1,'entt']]], - ['meta_5fdata',['meta_data',['../structentt_1_1meta__data.html',1,'entt']]], - ['meta_5fdtor',['meta_dtor',['../structentt_1_1meta__dtor.html',1,'entt']]], - ['meta_5ffactory',['meta_factory',['../classentt_1_1meta__factory.html',1,'entt']]], - ['meta_5ffunc',['meta_func',['../structentt_1_1meta__func.html',1,'entt']]], - ['meta_5fhandle',['meta_handle',['../classentt_1_1meta__handle.html',1,'entt']]], - ['meta_5fprop',['meta_prop',['../structentt_1_1meta__prop.html',1,'entt']]], - ['meta_5ftype',['meta_type',['../classentt_1_1meta__type.html',1,'entt']]], - ['monostate',['monostate',['../structentt_1_1monostate.html',1,'entt']]] + ['matcher_375',['matcher',['../structentt_1_1matcher.html',1,'entt']]], + ['meta_5fany_376',['meta_any',['../classentt_1_1meta__any.html',1,'entt']]], + ['meta_5fbase_377',['meta_base',['../structentt_1_1meta__base.html',1,'entt']]], + ['meta_5fconv_378',['meta_conv',['../structentt_1_1meta__conv.html',1,'entt']]], + ['meta_5fctor_379',['meta_ctor',['../structentt_1_1meta__ctor.html',1,'entt']]], + ['meta_5fctx_380',['meta_ctx',['../structentt_1_1meta__ctx.html',1,'entt']]], + ['meta_5fdata_381',['meta_data',['../structentt_1_1meta__data.html',1,'entt']]], + ['meta_5fdtor_382',['meta_dtor',['../structentt_1_1meta__dtor.html',1,'entt']]], + ['meta_5ffactory_383',['meta_factory',['../classentt_1_1meta__factory.html',1,'entt']]], + ['meta_5ffunc_384',['meta_func',['../structentt_1_1meta__func.html',1,'entt']]], + ['meta_5fhandle_385',['meta_handle',['../classentt_1_1meta__handle.html',1,'entt']]], + ['meta_5fprop_386',['meta_prop',['../structentt_1_1meta__prop.html',1,'entt']]], + ['meta_5ftype_387',['meta_type',['../classentt_1_1meta__type.html',1,'entt']]], + ['monostate_388',['monostate',['../structentt_1_1monostate.html',1,'entt']]] ]; diff --git a/search/classes_b.html b/search/classes_b.html index 6071ae049..02927f786 100644 --- a/search/classes_b.html +++ b/search/classes_b.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_b.js b/search/classes_b.js index e443e785a..449304a35 100644 --- a/search/classes_b.js +++ b/search/classes_b.js @@ -1,6 +1,6 @@ var searchData= [ - ['named_5ftype_5ftraits',['named_type_traits',['../structentt_1_1named__type__traits.html',1,'entt']]], - ['named_5ftype_5ftraits_3c_20const_20type_20_3e',['named_type_traits< const Type >',['../structentt_1_1named__type__traits_3_01const_01Type_01_4.html',1,'entt']]], - ['named_5ftype_5ftraits_3c_20type_20_3e',['named_type_traits< Type >',['../structentt_1_1named__type__traits.html',1,'entt']]] + ['named_5ftype_5ftraits_389',['named_type_traits',['../structentt_1_1named__type__traits.html',1,'entt']]], + ['named_5ftype_5ftraits_3c_20const_20type_20_3e_390',['named_type_traits< const Type >',['../structentt_1_1named__type__traits_3_01const_01Type_01_4.html',1,'entt']]], + ['named_5ftype_5ftraits_3c_20type_20_3e_391',['named_type_traits< Type >',['../structentt_1_1named__type__traits.html',1,'entt']]] ]; diff --git a/search/classes_c.html b/search/classes_c.html index 6cf1d0080..ab9f4049a 100644 --- a/search/classes_c.html +++ b/search/classes_c.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_c.js b/search/classes_c.js index 604673cda..eac37013b 100644 --- a/search/classes_c.js +++ b/search/classes_c.js @@ -1,4 +1,4 @@ var searchData= [ - ['overloaded',['overloaded',['../structentt_1_1overloaded.html',1,'entt']]] + ['overloaded_392',['overloaded',['../structentt_1_1overloaded.html',1,'entt']]] ]; diff --git a/search/classes_d.html b/search/classes_d.html index d4a7ed7ad..7170da25b 100644 --- a/search/classes_d.html +++ b/search/classes_d.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_d.js b/search/classes_d.js index 9dd36312b..f386a4f02 100644 --- a/search/classes_d.js +++ b/search/classes_d.js @@ -1,6 +1,6 @@ var searchData= [ - ['process',['process',['../classentt_1_1process.html',1,'entt']]], - ['process_3c_20process_5fadaptor_3c_20func_2c_20delta_20_3e_2c_20delta_20_3e',['process< process_adaptor< Func, Delta >, Delta >',['../classentt_1_1process.html',1,'entt']]], - ['process_5fadaptor',['process_adaptor',['../structentt_1_1process__adaptor.html',1,'entt']]] + ['process_393',['process',['../classentt_1_1process.html',1,'entt']]], + ['process_3c_20process_5fadaptor_3c_20func_2c_20delta_20_3e_2c_20delta_20_3e_394',['process< process_adaptor< Func, Delta >, Delta >',['../classentt_1_1process.html',1,'entt']]], + ['process_5fadaptor_395',['process_adaptor',['../structentt_1_1process__adaptor.html',1,'entt']]] ]; diff --git a/search/classes_e.html b/search/classes_e.html index 9a9f48c36..8a5d963ac 100644 --- a/search/classes_e.html +++ b/search/classes_e.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_e.js b/search/classes_e.js index f72b27bae..5151a4ba8 100644 --- a/search/classes_e.js +++ b/search/classes_e.js @@ -1,4 +1,4 @@ var searchData= [ - ['radix_5fsort',['radix_sort',['../structentt_1_1radix__sort.html',1,'entt']]] + ['radix_5fsort_396',['radix_sort',['../structentt_1_1radix__sort.html',1,'entt']]] ]; diff --git a/search/classes_f.html b/search/classes_f.html index a128d60be..c85f1181c 100644 --- a/search/classes_f.html +++ b/search/classes_f.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/classes_f.js b/search/classes_f.js index 1a0ba7b0d..7cc95c4ab 100644 --- a/search/classes_f.js +++ b/search/classes_f.js @@ -1,19 +1,19 @@ var searchData= [ - ['scheduler',['scheduler',['../classentt_1_1scheduler.html',1,'entt']]], - ['scoped_5fconnection',['scoped_connection',['../structentt_1_1scoped__connection.html',1,'entt']]], - ['service_5flocator',['service_locator',['../structentt_1_1service__locator.html',1,'entt']]], - ['sigh',['sigh',['../classentt_1_1sigh.html',1,'entt']]], - ['sigh_3c_20ret_28args_2e_2e_2e_29_3e',['sigh< Ret(Args...)>',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html',1,'entt']]], - ['sigh_3c_20void_28const_20entity_2c_20entt_3a_3abasic_5fregistry_20_26_29_3e',['sigh< void(const Entity, entt::basic_registry &)>',['../classentt_1_1sigh.html',1,'entt']]], - ['sigh_3c_20void_28const_20entity_2c_20entt_3a_3abasic_5fregistry_20_26_2c_20reference_5ftype_29_3e',['sigh< void(const Entity, entt::basic_registry &, reference_type)>',['../classentt_1_1sigh.html',1,'entt']]], - ['sigh_3c_20void_28const_20event_20_26_29_3e',['sigh< void(const Event &)>',['../classentt_1_1sigh.html',1,'entt']]], - ['sink',['sink',['../classentt_1_1sink.html',1,'entt']]], - ['sink_3c_20ret_28args_2e_2e_2e_29_3e',['sink< Ret(Args...)>',['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html',1,'entt']]], - ['sparse_5fset',['sparse_set',['../classentt_1_1sparse__set.html',1,'entt']]], - ['sparse_5fset_3c_20entity_5ftype_20_3e',['sparse_set< entity_type >',['../classentt_1_1sparse__set.html',1,'entt']]], - ['std_5fsort',['std_sort',['../structentt_1_1std__sort.html',1,'entt']]], - ['storage',['storage',['../structentt_1_1storage.html',1,'entt']]], - ['storage_3c_20entity_2c_20component_20_3e',['storage< Entity, Component >',['../structentt_1_1storage.html',1,'entt']]], - ['storage_3c_20entity_5ftype_2c_20payload_5ftype_20_3e',['storage< entity_type, payload_type >',['../structentt_1_1storage.html',1,'entt']]] + ['scheduler_397',['scheduler',['../classentt_1_1scheduler.html',1,'entt']]], + ['scoped_5fconnection_398',['scoped_connection',['../structentt_1_1scoped__connection.html',1,'entt']]], + ['service_5flocator_399',['service_locator',['../structentt_1_1service__locator.html',1,'entt']]], + ['sigh_400',['sigh',['../classentt_1_1sigh.html',1,'entt']]], + ['sigh_3c_20ret_28args_2e_2e_2e_29_3e_401',['sigh< Ret(Args...)>',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html',1,'entt']]], + ['sigh_3c_20void_28const_20entity_2c_20entt_3a_3abasic_5fregistry_20_26_29_3e_402',['sigh< void(const Entity, entt::basic_registry &)>',['../classentt_1_1sigh.html',1,'entt']]], + ['sigh_3c_20void_28const_20entity_2c_20entt_3a_3abasic_5fregistry_20_26_2c_20reference_5ftype_29_3e_403',['sigh< void(const Entity, entt::basic_registry &, reference_type)>',['../classentt_1_1sigh.html',1,'entt']]], + ['sigh_3c_20void_28const_20event_20_26_29_3e_404',['sigh< void(const Event &)>',['../classentt_1_1sigh.html',1,'entt']]], + ['sink_405',['sink',['../classentt_1_1sink.html',1,'entt']]], + ['sink_3c_20ret_28args_2e_2e_2e_29_3e_406',['sink< Ret(Args...)>',['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html',1,'entt']]], + ['sparse_5fset_407',['sparse_set',['../classentt_1_1sparse__set.html',1,'entt']]], + ['sparse_5fset_3c_20entity_5ftype_20_3e_408',['sparse_set< entity_type >',['../classentt_1_1sparse__set.html',1,'entt']]], + ['std_5fsort_409',['std_sort',['../structentt_1_1std__sort.html',1,'entt']]], + ['storage_410',['storage',['../structentt_1_1storage.html',1,'entt']]], + ['storage_3c_20entity_2c_20component_20_3e_411',['storage< Entity, Component >',['../structentt_1_1storage.html',1,'entt']]], + ['storage_3c_20entity_5ftype_2c_20payload_5ftype_20_3e_412',['storage< entity_type, payload_type >',['../structentt_1_1storage.html',1,'entt']]] ]; diff --git a/search/functions_0.html b/search/functions_0.html index 4e6d87d15..8a729f78c 100644 --- a/search/functions_0.html +++ b/search/functions_0.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_0.js b/search/functions_0.js index 1e0492f0d..eb334ef07 100644 --- a/search/functions_0.js +++ b/search/functions_0.js @@ -1,12 +1,12 @@ var searchData= [ - ['abort',['abort',['../classentt_1_1process.html#a0a45fb64300d51aa0f826609d11a3f78',1,'entt::process::abort()'],['../classentt_1_1scheduler.html#aabc25388bff1b3b0770f913f54b915f2',1,'entt::scheduler::abort()']]], - ['alive',['alive',['../classentt_1_1basic__registry.html#a65a49772b3d59dd39c76b24a62e0fdf4',1,'entt::basic_registry::alive()'],['../classentt_1_1process.html#a8bc92bd0304659eb2a034fae65f1eeb9',1,'entt::process::alive()']]], - ['arg',['arg',['../structentt_1_1meta__ctor.html#a3faab3b8c49ee1b803f337435c8d54ce',1,'entt::meta_ctor::arg()'],['../structentt_1_1meta__func.html#a34709d9f0a7498382ced3a4e2daa64ba',1,'entt::meta_func::arg()']]], - ['arrange',['arrange',['../classentt_1_1sparse__set.html#a28b36afb6ae6f91d995ff259184d6515',1,'entt::sparse_set']]], - ['as_5fgroup',['as_group',['../structentt_1_1as__group.html#a7ebe095efa7c1e00e2f156ad7930d9a9',1,'entt::as_group::as_group()'],['../namespaceentt.html#a6609f31d6ab3f544ebf7d0413d007ead',1,'entt::as_group(basic_registry< Entity > &) ENTT_NOEXCEPT -> as_group< false, Entity >'],['../namespaceentt.html#a8fce796266ac507c9b0c193a70f51745',1,'entt::as_group(const basic_registry< Entity > &) ENTT_NOEXCEPT -> as_group< true, Entity >']]], - ['as_5fview',['as_view',['../structentt_1_1as__view.html#a820ab4da509a0fb60c4edf8ea24b748a',1,'entt::as_view::as_view()'],['../namespaceentt.html#a3fee75741468f7807d3d48dd807ee024',1,'entt::as_view(basic_registry< Entity > &) ENTT_NOEXCEPT -> as_view< false, Entity >'],['../namespaceentt.html#aac314d83c9af1077857f01975f086bed',1,'entt::as_view(const basic_registry< Entity > &) ENTT_NOEXCEPT -> as_view< true, Entity >']]], - ['assign',['assign',['../structentt_1_1basic__actor.html#abf572e19a5d9625fbf80cc4f00cba032',1,'entt::basic_actor::assign()'],['../classentt_1_1basic__registry.html#a3deb5b8f14eb1414c92e6ccb2065ce0e',1,'entt::basic_registry::assign()']]], - ['assign_5for_5freplace',['assign_or_replace',['../classentt_1_1basic__registry.html#aa013d9c67f8fda068f616aa9bb66b564',1,'entt::basic_registry']]], - ['attach',['attach',['../classentt_1_1scheduler.html#a729c83e1983123c642a08cda67e486e3',1,'entt::scheduler::attach(Args &&... args)'],['../classentt_1_1scheduler.html#a871812d08af8483316d1ce5d1e9d686f',1,'entt::scheduler::attach(Func &&func)']]] + ['abort_426',['abort',['../classentt_1_1process.html#a0a45fb64300d51aa0f826609d11a3f78',1,'entt::process::abort()'],['../classentt_1_1scheduler.html#aabc25388bff1b3b0770f913f54b915f2',1,'entt::scheduler::abort()']]], + ['alive_427',['alive',['../classentt_1_1basic__registry.html#a65a49772b3d59dd39c76b24a62e0fdf4',1,'entt::basic_registry::alive()'],['../classentt_1_1process.html#a8bc92bd0304659eb2a034fae65f1eeb9',1,'entt::process::alive()']]], + ['arg_428',['arg',['../structentt_1_1meta__ctor.html#a3faab3b8c49ee1b803f337435c8d54ce',1,'entt::meta_ctor::arg()'],['../structentt_1_1meta__func.html#a34709d9f0a7498382ced3a4e2daa64ba',1,'entt::meta_func::arg()']]], + ['arrange_429',['arrange',['../classentt_1_1sparse__set.html#a28b36afb6ae6f91d995ff259184d6515',1,'entt::sparse_set']]], + ['as_5fgroup_430',['as_group',['../structentt_1_1as__group.html#a7ebe095efa7c1e00e2f156ad7930d9a9',1,'entt::as_group::as_group()'],['../namespaceentt.html#a6609f31d6ab3f544ebf7d0413d007ead',1,'entt::as_group(basic_registry< Entity > &) ENTT_NOEXCEPT -> as_group< false, Entity >'],['../namespaceentt.html#a8fce796266ac507c9b0c193a70f51745',1,'entt::as_group(const basic_registry< Entity > &) ENTT_NOEXCEPT -> as_group< true, Entity >']]], + ['as_5fview_431',['as_view',['../structentt_1_1as__view.html#a820ab4da509a0fb60c4edf8ea24b748a',1,'entt::as_view::as_view()'],['../namespaceentt.html#a3fee75741468f7807d3d48dd807ee024',1,'entt::as_view(basic_registry< Entity > &) ENTT_NOEXCEPT -> as_view< false, Entity >'],['../namespaceentt.html#aac314d83c9af1077857f01975f086bed',1,'entt::as_view(const basic_registry< Entity > &) ENTT_NOEXCEPT -> as_view< true, Entity >']]], + ['assign_432',['assign',['../structentt_1_1basic__actor.html#abf572e19a5d9625fbf80cc4f00cba032',1,'entt::basic_actor::assign()'],['../classentt_1_1basic__registry.html#a3deb5b8f14eb1414c92e6ccb2065ce0e',1,'entt::basic_registry::assign()']]], + ['assign_5for_5freplace_433',['assign_or_replace',['../classentt_1_1basic__registry.html#aa013d9c67f8fda068f616aa9bb66b564',1,'entt::basic_registry']]], + ['attach_434',['attach',['../classentt_1_1scheduler.html#a729c83e1983123c642a08cda67e486e3',1,'entt::scheduler::attach(Args &&... args)'],['../classentt_1_1scheduler.html#a871812d08af8483316d1ce5d1e9d686f',1,'entt::scheduler::attach(Func &&func)']]] ]; diff --git a/search/functions_1.html b/search/functions_1.html index b343e2db5..d4929aaf1 100644 --- a/search/functions_1.html +++ b/search/functions_1.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_1.js b/search/functions_1.js index d7a4f0830..09c3c6f2c 100644 --- a/search/functions_1.js +++ b/search/functions_1.js @@ -1,16 +1,16 @@ var searchData= [ - ['backend',['backend',['../structentt_1_1basic__actor.html#a079bddd72566b14843729a154a8f684e',1,'entt::basic_actor::backend() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a827ed2e23e39e8b706f7acc511a46024',1,'entt::basic_actor::backend() ENTT_NOEXCEPT']]], - ['base',['base',['../classentt_1_1meta__factory.html#a2387e5bc85a87e3c936d82a956805bfb',1,'entt::meta_factory::base()'],['../classentt_1_1meta__type.html#ace805045bd4049fb839d1b92f89b1999',1,'entt::meta_type::base(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae42527a8a5aaaf5eeb684aca37399569',1,'entt::meta_type::base(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]], - ['basic_5factor',['basic_actor',['../structentt_1_1basic__actor.html#a32635ae3046ebca665adef6b3ef87ef3',1,'entt::basic_actor::basic_actor(registry_type &ref)'],['../structentt_1_1basic__actor.html#a3633aea0c287c0de909dc1d7aad80aef',1,'entt::basic_actor::basic_actor(entity_type entity, registry_type &ref)'],['../structentt_1_1basic__actor.html#a8c86ac43873d5b42c1774ea6646513e0',1,'entt::basic_actor::basic_actor(basic_actor &&other)']]], - ['basic_5fcontinuous_5floader',['basic_continuous_loader',['../classentt_1_1basic__continuous__loader.html#a18d87fd5fc80f062ae27b90ef3232bd8',1,'entt::basic_continuous_loader::basic_continuous_loader(basic_registry< entity_type > &source) ENTT_NOEXCEPT'],['../classentt_1_1basic__continuous__loader.html#a619f3aa278b405481fd1e26c46a96a5c',1,'entt::basic_continuous_loader::basic_continuous_loader(basic_continuous_loader &&)=default']]], - ['basic_5fhashed_5fstring',['basic_hashed_string',['../classentt_1_1basic__hashed__string.html#a2c75763872c028b062701523e0314f29',1,'entt::basic_hashed_string::basic_hashed_string() ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#aac422f04d11c1e5573f04809c1e1c106',1,'entt::basic_hashed_string::basic_hashed_string(const value_type(&curr)[N]) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#a7ab5e09f3e552436872bcaaf9ca2c1ac',1,'entt::basic_hashed_string::basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT'],['../namespaceentt.html#a32ab4306d014ba95869e88be161145b0',1,'entt::basic_hashed_string()']]], - ['basic_5fobserver',['basic_observer',['../classentt_1_1basic__observer.html#a31d9929b1c6d0b422ecbccff86803d3c',1,'entt::basic_observer::basic_observer() ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#aa685204c94266b5631c13540012e73c2',1,'entt::basic_observer::basic_observer(const basic_observer &)=delete'],['../classentt_1_1basic__observer.html#accbe2546b1b74de1a59e673cb6250413',1,'entt::basic_observer::basic_observer(basic_observer &&)=delete'],['../classentt_1_1basic__observer.html#a2290c465994e6af15f1fe7b35541ffbd',1,'entt::basic_observer::basic_observer(basic_registry< entity_type > &reg, basic_collector< Matcher... >) ENTT_NOEXCEPT']]], - ['basic_5fregistry',['basic_registry',['../classentt_1_1basic__registry.html#af976c68848de4fa6db6dea2b4cf76e77',1,'entt::basic_registry::basic_registry() ENTT_NOEXCEPT=default'],['../classentt_1_1basic__registry.html#a3fc181b150fee3e42b8cad4103953b9f',1,'entt::basic_registry::basic_registry(basic_registry &&)=default']]], - ['basic_5fsnapshot',['basic_snapshot',['../classentt_1_1basic__snapshot.html#a10f658d8e4feb7df9da8b48119551334',1,'entt::basic_snapshot']]], - ['basic_5fsnapshot_5floader',['basic_snapshot_loader',['../classentt_1_1basic__snapshot__loader.html#acc078b2e9068ae41a2910168b40322d4',1,'entt::basic_snapshot_loader']]], - ['batch',['batch',['../classentt_1_1sparse__set.html#a642460f7f0ca8e42220c43c785467063',1,'entt::sparse_set::batch()'],['../classentt_1_1basic__storage.html#a5ef85c69a23deffd46b2dcfafcc4a668',1,'entt::basic_storage::batch()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a66175004c693a405d57722c67b1ceda3',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::batch()']]], - ['before',['before',['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a039ae0c0999aa4e5c42620f08fe85591',1,'entt::sink< Ret(Args...)>::before()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#abf3701984a639f27e2ebc1e962cb3035',1,'entt::sink< Ret(Args...)>::before(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#aa36189084503a35befcd5f443578e88b',1,'entt::sink< Ret(Args...)>::before(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#aff2dec06fde148ab6f74ba8f5a4679c4',1,'entt::sink< Ret(Args...)>::before(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ab8247ff409a75c0276dd003735247863',1,'entt::sink< Ret(Args...)>::before(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a80070f9124f7281cbaf5d01284445f9d',1,'entt::sink< Ret(Args...)>::before()']]], - ['begin',['begin',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a98d938206557463317eac00c8eeaa73e',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::begin()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acc9327669866ff8d39c4a6e6d2bd2333',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::begin()'],['../classentt_1_1basic__observer.html#a33bca86113be57e75ca1da80620763d1',1,'entt::basic_observer::begin()'],['../classentt_1_1basic__runtime__view.html#af47b1aff2d44990f17c9740cf24a2670',1,'entt::basic_runtime_view::begin()'],['../classentt_1_1sparse__set.html#a06743336f265989b48e106a3d3bd1562',1,'entt::sparse_set::begin()'],['../classentt_1_1basic__storage.html#aecc4b13b67a7664c5c36596f2b927bed',1,'entt::basic_storage::begin() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ab963b76ebe297a1ad4a2c433aa55f2b5',1,'entt::basic_storage::begin() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a9676a3940e684f720bd2fc06128a4e2e',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::begin()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a2ec860ee4a88c8ff309b614070b98b15',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::begin()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a2b0108681a38c823de6a4ba49baa3957',1,'entt::basic_view< Entity, exclude_t<>, Component >::begin()']]], - ['bind',['bind',['../structentt_1_1meta__ctx.html#a43f914e2d2470e82b1e5415f60a4f803',1,'entt::meta_ctx']]] + ['backend_435',['backend',['../structentt_1_1basic__actor.html#a079bddd72566b14843729a154a8f684e',1,'entt::basic_actor::backend() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a827ed2e23e39e8b706f7acc511a46024',1,'entt::basic_actor::backend() ENTT_NOEXCEPT']]], + ['base_436',['base',['../classentt_1_1meta__factory.html#a2387e5bc85a87e3c936d82a956805bfb',1,'entt::meta_factory::base()'],['../classentt_1_1meta__type.html#ace805045bd4049fb839d1b92f89b1999',1,'entt::meta_type::base(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae42527a8a5aaaf5eeb684aca37399569',1,'entt::meta_type::base(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]], + ['basic_5factor_437',['basic_actor',['../structentt_1_1basic__actor.html#a32635ae3046ebca665adef6b3ef87ef3',1,'entt::basic_actor::basic_actor(registry_type &ref)'],['../structentt_1_1basic__actor.html#a3633aea0c287c0de909dc1d7aad80aef',1,'entt::basic_actor::basic_actor(entity_type entity, registry_type &ref)'],['../structentt_1_1basic__actor.html#a8c86ac43873d5b42c1774ea6646513e0',1,'entt::basic_actor::basic_actor(basic_actor &&other)']]], + ['basic_5fcontinuous_5floader_438',['basic_continuous_loader',['../classentt_1_1basic__continuous__loader.html#a18d87fd5fc80f062ae27b90ef3232bd8',1,'entt::basic_continuous_loader::basic_continuous_loader(basic_registry< entity_type > &source) ENTT_NOEXCEPT'],['../classentt_1_1basic__continuous__loader.html#a619f3aa278b405481fd1e26c46a96a5c',1,'entt::basic_continuous_loader::basic_continuous_loader(basic_continuous_loader &&)=default']]], + ['basic_5fhashed_5fstring_439',['basic_hashed_string',['../classentt_1_1basic__hashed__string.html#a2c75763872c028b062701523e0314f29',1,'entt::basic_hashed_string::basic_hashed_string() ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#aac422f04d11c1e5573f04809c1e1c106',1,'entt::basic_hashed_string::basic_hashed_string(const value_type(&curr)[N]) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#a7ab5e09f3e552436872bcaaf9ca2c1ac',1,'entt::basic_hashed_string::basic_hashed_string(const_wrapper wrapper) ENTT_NOEXCEPT'],['../namespaceentt.html#a32ab4306d014ba95869e88be161145b0',1,'entt::basic_hashed_string()']]], + ['basic_5fobserver_440',['basic_observer',['../classentt_1_1basic__observer.html#a31d9929b1c6d0b422ecbccff86803d3c',1,'entt::basic_observer::basic_observer() ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#aa685204c94266b5631c13540012e73c2',1,'entt::basic_observer::basic_observer(const basic_observer &)=delete'],['../classentt_1_1basic__observer.html#accbe2546b1b74de1a59e673cb6250413',1,'entt::basic_observer::basic_observer(basic_observer &&)=delete'],['../classentt_1_1basic__observer.html#a2290c465994e6af15f1fe7b35541ffbd',1,'entt::basic_observer::basic_observer(basic_registry< entity_type > &reg, basic_collector< Matcher... >) ENTT_NOEXCEPT']]], + ['basic_5fregistry_441',['basic_registry',['../classentt_1_1basic__registry.html#af976c68848de4fa6db6dea2b4cf76e77',1,'entt::basic_registry::basic_registry() ENTT_NOEXCEPT=default'],['../classentt_1_1basic__registry.html#a3fc181b150fee3e42b8cad4103953b9f',1,'entt::basic_registry::basic_registry(basic_registry &&)=default']]], + ['basic_5fsnapshot_442',['basic_snapshot',['../classentt_1_1basic__snapshot.html#a10f658d8e4feb7df9da8b48119551334',1,'entt::basic_snapshot']]], + ['basic_5fsnapshot_5floader_443',['basic_snapshot_loader',['../classentt_1_1basic__snapshot__loader.html#acc078b2e9068ae41a2910168b40322d4',1,'entt::basic_snapshot_loader']]], + ['batch_444',['batch',['../classentt_1_1sparse__set.html#a642460f7f0ca8e42220c43c785467063',1,'entt::sparse_set::batch()'],['../classentt_1_1basic__storage.html#a5ef85c69a23deffd46b2dcfafcc4a668',1,'entt::basic_storage::batch()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a66175004c693a405d57722c67b1ceda3',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::batch()']]], + ['before_445',['before',['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a039ae0c0999aa4e5c42620f08fe85591',1,'entt::sink< Ret(Args...)>::before()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#abf3701984a639f27e2ebc1e962cb3035',1,'entt::sink< Ret(Args...)>::before(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#aa36189084503a35befcd5f443578e88b',1,'entt::sink< Ret(Args...)>::before(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#aff2dec06fde148ab6f74ba8f5a4679c4',1,'entt::sink< Ret(Args...)>::before(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ab8247ff409a75c0276dd003735247863',1,'entt::sink< Ret(Args...)>::before(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a80070f9124f7281cbaf5d01284445f9d',1,'entt::sink< Ret(Args...)>::before()']]], + ['begin_446',['begin',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a98d938206557463317eac00c8eeaa73e',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::begin()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acc9327669866ff8d39c4a6e6d2bd2333',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::begin()'],['../classentt_1_1basic__observer.html#a33bca86113be57e75ca1da80620763d1',1,'entt::basic_observer::begin()'],['../classentt_1_1basic__runtime__view.html#af47b1aff2d44990f17c9740cf24a2670',1,'entt::basic_runtime_view::begin()'],['../classentt_1_1sparse__set.html#a06743336f265989b48e106a3d3bd1562',1,'entt::sparse_set::begin()'],['../classentt_1_1basic__storage.html#aecc4b13b67a7664c5c36596f2b927bed',1,'entt::basic_storage::begin() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ab963b76ebe297a1ad4a2c433aa55f2b5',1,'entt::basic_storage::begin() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a9676a3940e684f720bd2fc06128a4e2e',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::begin()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a2ec860ee4a88c8ff309b614070b98b15',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::begin()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a2b0108681a38c823de6a4ba49baa3957',1,'entt::basic_view< Entity, exclude_t<>, Component >::begin()']]], + ['bind_447',['bind',['../structentt_1_1meta__ctx.html#a43f914e2d2470e82b1e5415f60a4f803',1,'entt::meta_ctx']]] ]; diff --git a/search/functions_10.html b/search/functions_10.html index 72bc1ea1f..839ba3308 100644 --- a/search/functions_10.html +++ b/search/functions_10.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_10.js b/search/functions_10.js index 416e9841c..17cbc0f14 100644 --- a/search/functions_10.js +++ b/search/functions_10.js @@ -1,11 +1,11 @@ var searchData= [ - ['temp',['temp',['../structentt_1_1cache.html#a3083170fdfa3f865931f9222d897d783',1,'entt::cache']]], - ['tick',['tick',['../classentt_1_1process.html#aacc7fe0ef3265113079c70ff8cd9478d',1,'entt::process']]], - ['to_5fvalue',['to_value',['../classentt_1_1basic__hashed__string.html#aa23b06fa1dbca8f703a2251c5191c200',1,'entt::basic_hashed_string::to_value(const value_type(&str)[N]) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#a750c547ce546aaee2f532db7020f3361',1,'entt::basic_hashed_string::to_value(const_wrapper wrapper) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#aa4f3066c3753c41634c1f198f4fe6512',1,'entt::basic_hashed_string::to_value(const value_type *str, std::size_t size) ENTT_NOEXCEPT']]], - ['trigger',['trigger',['../classentt_1_1dispatcher.html#ac3d3eae7004c63f0232b09f2770c4ebd',1,'entt::dispatcher::trigger(Args &&... args)'],['../classentt_1_1dispatcher.html#a1d14234071d22c9fe09c453ebd818d2e',1,'entt::dispatcher::trigger(Event &&event)']]], - ['try_5fcast',['try_cast',['../classentt_1_1meta__any.html#a20d96950feab3d20d7c7fe1a5b7325bd',1,'entt::meta_any::try_cast() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#ab3513197f840c5c1e23e7895a796f27a',1,'entt::meta_any::try_cast() ENTT_NOEXCEPT']]], - ['try_5fctx',['try_ctx',['../classentt_1_1basic__registry.html#a33650f5792414c71ef00c3bcaca3f1d5',1,'entt::basic_registry::try_ctx() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a4182d11d18ec7873562c2842a332ac89',1,'entt::basic_registry::try_ctx() ENTT_NOEXCEPT']]], - ['try_5fget',['try_get',['../structentt_1_1basic__actor.html#ac37259d66c0a8f42b7e744567382c6c2',1,'entt::basic_actor::try_get() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a0320585b864c700d980212f37654a8a1',1,'entt::basic_actor::try_get() ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a25c4412448ddcbfe1290f72498ae7809',1,'entt::basic_registry::try_get([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a2c3ba909a2f845601a5b873c6bdd8371',1,'entt::basic_registry::try_get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#aab7da23b603d6cc78e67b3509ad979fa',1,'entt::basic_storage::try_get(const entity_type entt) const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a8ff9d6ef48840c8ad88f8c0b8b5dcd35',1,'entt::basic_storage::try_get(const entity_type entt) ENTT_NOEXCEPT']]], - ['type',['type',['../classentt_1_1basic__registry.html#a478113cca30db07fa56a557d535e09c1',1,'entt::basic_registry::type()'],['../classentt_1_1meta__factory.html#a6f49abe1b22384def9bc19871a4c5eb2',1,'entt::meta_factory::type(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#a0426faf1bcf4ad72d541023837a127e0',1,'entt::meta_factory::type() ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a406ea303f140056a30103d90afab2737',1,'entt::meta_any::type()'],['../classentt_1_1meta__handle.html#aa8f78e22bdf61554c38f27575fd8cf33',1,'entt::meta_handle::type()'],['../structentt_1_1meta__base.html#a5e9f69b43cdc90add110654acde5e8b6',1,'entt::meta_base::type()'],['../structentt_1_1meta__conv.html#accdedbb8b1636f59967dc30ba5d7e753',1,'entt::meta_conv::type()'],['../structentt_1_1meta__data.html#a4d99cf1fb67d2bea840fa608dc95e64f',1,'entt::meta_data::type()']]] + ['temp_591',['temp',['../structentt_1_1cache.html#a3083170fdfa3f865931f9222d897d783',1,'entt::cache']]], + ['tick_592',['tick',['../classentt_1_1process.html#aacc7fe0ef3265113079c70ff8cd9478d',1,'entt::process']]], + ['to_5fvalue_593',['to_value',['../classentt_1_1basic__hashed__string.html#aa23b06fa1dbca8f703a2251c5191c200',1,'entt::basic_hashed_string::to_value(const value_type(&str)[N]) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#a750c547ce546aaee2f532db7020f3361',1,'entt::basic_hashed_string::to_value(const_wrapper wrapper) ENTT_NOEXCEPT'],['../classentt_1_1basic__hashed__string.html#aa4f3066c3753c41634c1f198f4fe6512',1,'entt::basic_hashed_string::to_value(const value_type *str, std::size_t size) ENTT_NOEXCEPT']]], + ['trigger_594',['trigger',['../classentt_1_1dispatcher.html#ac3d3eae7004c63f0232b09f2770c4ebd',1,'entt::dispatcher::trigger(Args &&... args)'],['../classentt_1_1dispatcher.html#a1d14234071d22c9fe09c453ebd818d2e',1,'entt::dispatcher::trigger(Event &&event)']]], + ['try_5fcast_595',['try_cast',['../classentt_1_1meta__any.html#a20d96950feab3d20d7c7fe1a5b7325bd',1,'entt::meta_any::try_cast() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#ab3513197f840c5c1e23e7895a796f27a',1,'entt::meta_any::try_cast() ENTT_NOEXCEPT']]], + ['try_5fctx_596',['try_ctx',['../classentt_1_1basic__registry.html#a33650f5792414c71ef00c3bcaca3f1d5',1,'entt::basic_registry::try_ctx() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a4182d11d18ec7873562c2842a332ac89',1,'entt::basic_registry::try_ctx() ENTT_NOEXCEPT']]], + ['try_5fget_597',['try_get',['../structentt_1_1basic__actor.html#ac37259d66c0a8f42b7e744567382c6c2',1,'entt::basic_actor::try_get() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a0320585b864c700d980212f37654a8a1',1,'entt::basic_actor::try_get() ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a25c4412448ddcbfe1290f72498ae7809',1,'entt::basic_registry::try_get([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a2c3ba909a2f845601a5b873c6bdd8371',1,'entt::basic_registry::try_get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#aab7da23b603d6cc78e67b3509ad979fa',1,'entt::basic_storage::try_get(const entity_type entt) const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a8ff9d6ef48840c8ad88f8c0b8b5dcd35',1,'entt::basic_storage::try_get(const entity_type entt) ENTT_NOEXCEPT']]], + ['type_598',['type',['../classentt_1_1basic__registry.html#a478113cca30db07fa56a557d535e09c1',1,'entt::basic_registry::type()'],['../classentt_1_1meta__factory.html#a6f49abe1b22384def9bc19871a4c5eb2',1,'entt::meta_factory::type(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#a0426faf1bcf4ad72d541023837a127e0',1,'entt::meta_factory::type() ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a406ea303f140056a30103d90afab2737',1,'entt::meta_any::type()'],['../classentt_1_1meta__handle.html#aa8f78e22bdf61554c38f27575fd8cf33',1,'entt::meta_handle::type()'],['../structentt_1_1meta__base.html#a5e9f69b43cdc90add110654acde5e8b6',1,'entt::meta_base::type()'],['../structentt_1_1meta__conv.html#accdedbb8b1636f59967dc30ba5d7e753',1,'entt::meta_conv::type()'],['../structentt_1_1meta__data.html#a4d99cf1fb67d2bea840fa608dc95e64f',1,'entt::meta_data::type()']]] ]; diff --git a/search/functions_11.html b/search/functions_11.html index 6948a6155..9d548c4f0 100644 --- a/search/functions_11.html +++ b/search/functions_11.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_11.js b/search/functions_11.js index 56f7eed9f..a9e71fd57 100644 --- a/search/functions_11.js +++ b/search/functions_11.js @@ -1,6 +1,6 @@ var searchData= [ - ['unpause',['unpause',['../classentt_1_1process.html#a91fd8adb2ea48c88c6f9fb5818890f67',1,'entt::process']]], - ['unset',['unset',['../classentt_1_1basic__registry.html#aaa23b74e76b1749bb510a86e9d31b9cd',1,'entt::basic_registry']]], - ['update',['update',['../structentt_1_1process__adaptor.html#a7514fabbbda491742872bc0e52dde5c2',1,'entt::process_adaptor::update()'],['../classentt_1_1scheduler.html#a827eae426378df9ed9190752156a4154',1,'entt::scheduler::update()'],['../classentt_1_1dispatcher.html#aabed6fd7fa4027dcfa3afc7bc20f2784',1,'entt::dispatcher::update()'],['../classentt_1_1dispatcher.html#ae15c11634047d7718db5e2e30675c80c',1,'entt::dispatcher::update() const']]] + ['unpause_599',['unpause',['../classentt_1_1process.html#a91fd8adb2ea48c88c6f9fb5818890f67',1,'entt::process']]], + ['unset_600',['unset',['../classentt_1_1basic__registry.html#aaa23b74e76b1749bb510a86e9d31b9cd',1,'entt::basic_registry']]], + ['update_601',['update',['../structentt_1_1process__adaptor.html#a7514fabbbda491742872bc0e52dde5c2',1,'entt::process_adaptor::update()'],['../classentt_1_1scheduler.html#a827eae426378df9ed9190752156a4154',1,'entt::scheduler::update()'],['../classentt_1_1dispatcher.html#aabed6fd7fa4027dcfa3afc7bc20f2784',1,'entt::dispatcher::update()'],['../classentt_1_1dispatcher.html#ae15c11634047d7718db5e2e30675c80c',1,'entt::dispatcher::update() const']]] ]; diff --git a/search/functions_12.html b/search/functions_12.html index 3df848924..16f6ecceb 100644 --- a/search/functions_12.html +++ b/search/functions_12.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_12.js b/search/functions_12.js index c46a3a935..441e955c9 100644 --- a/search/functions_12.js +++ b/search/functions_12.js @@ -1,7 +1,7 @@ var searchData= [ - ['valid',['valid',['../classentt_1_1basic__registry.html#ac7d145b7adb8ca486c49cfd44aebea73',1,'entt::basic_registry']]], - ['value',['value',['../classentt_1_1basic__hashed__string.html#afb3a92282e81fb50af66953f39671f3c',1,'entt::basic_hashed_string::value()'],['../structentt_1_1meta__prop.html#a38a979e40971692929b46f80c3f22f9e',1,'entt::meta_prop::value()']]], - ['version',['version',['../classentt_1_1basic__registry.html#a75f09d82b0cd6305ea7422d60162704e',1,'entt::basic_registry']]], - ['view',['view',['../classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b',1,'entt::basic_registry::view(exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#aedb9b044141a3f700a1e547def00b768',1,'entt::basic_registry::view(exclude_t< Exclude... >={}) const']]] + ['valid_602',['valid',['../classentt_1_1basic__registry.html#ac7d145b7adb8ca486c49cfd44aebea73',1,'entt::basic_registry']]], + ['value_603',['value',['../classentt_1_1basic__hashed__string.html#afb3a92282e81fb50af66953f39671f3c',1,'entt::basic_hashed_string::value()'],['../structentt_1_1meta__prop.html#a38a979e40971692929b46f80c3f22f9e',1,'entt::meta_prop::value()']]], + ['version_604',['version',['../classentt_1_1basic__registry.html#a75f09d82b0cd6305ea7422d60162704e',1,'entt::basic_registry']]], + ['view_605',['view',['../classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b',1,'entt::basic_registry::view(exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#aedb9b044141a3f700a1e547def00b768',1,'entt::basic_registry::view(exclude_t< Exclude... >={}) const']]] ]; diff --git a/search/functions_13.html b/search/functions_13.html index febf8e03d..a552a4f2d 100644 --- a/search/functions_13.html +++ b/search/functions_13.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_13.js b/search/functions_13.js index 15b91062a..fb2838be3 100644 --- a/search/functions_13.js +++ b/search/functions_13.js @@ -1,4 +1,4 @@ var searchData= [ - ['where',['where',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#a96d7a22588a9f1f67ba805de1f027433',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >']]] + ['where_606',['where',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#a96d7a22588a9f1f67ba805de1f027433',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >']]] ]; diff --git a/search/functions_14.html b/search/functions_14.html index 4c814f5ab..97f0dcb8b 100644 --- a/search/functions_14.html +++ b/search/functions_14.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_14.js b/search/functions_14.js index 6acb22f4b..59ca34a4c 100644 --- a/search/functions_14.js +++ b/search/functions_14.js @@ -1,4 +1,4 @@ var searchData= [ - ['y_5fcombinator',['y_combinator',['../structentt_1_1y__combinator.html#a3ef9b5550c3de06bed6297ae3b79815f',1,'entt::y_combinator']]] + ['y_5fcombinator_607',['y_combinator',['../structentt_1_1y__combinator.html#a3ef9b5550c3de06bed6297ae3b79815f',1,'entt::y_combinator']]] ]; diff --git a/search/functions_15.html b/search/functions_15.html index 0f002b8a8..fbd092e6d 100644 --- a/search/functions_15.html +++ b/search/functions_15.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_15.js b/search/functions_15.js index 1262abc36..f0380e1d8 100644 --- a/search/functions_15.js +++ b/search/functions_15.js @@ -1,11 +1,11 @@ var searchData= [ - ['_7ebasic_5factor',['~basic_actor',['../structentt_1_1basic__actor.html#a46dc913885c448e059e9ca7cf3a21221',1,'entt::basic_actor']]], - ['_7ebasic_5fobserver',['~basic_observer',['../classentt_1_1basic__observer.html#afb6fbd2a5ce7bc57013b0bd9ad482599',1,'entt::basic_observer']]], - ['_7eemitter',['~emitter',['../classentt_1_1emitter.html#a77d175ad8e8060c3628b3fb544cba15f',1,'entt::emitter']]], - ['_7emeta_5fany',['~meta_any',['../classentt_1_1meta__any.html#a816dae3d4ed3e41fcb376ec5ec9c38c1',1,'entt::meta_any']]], - ['_7eprocess',['~process',['../classentt_1_1process.html#a9280903240c53d1f2c7474ae8ccaa48d',1,'entt::process']]], - ['_7escoped_5fconnection',['~scoped_connection',['../structentt_1_1scoped__connection.html#a8bc8b8630e2ad076216b6aca416ce32c',1,'entt::scoped_connection']]], - ['_7eservice_5flocator',['~service_locator',['../structentt_1_1service__locator.html#a2cbb6cfc1614067ae92f1c60580236a8',1,'entt::service_locator']]], - ['_7esparse_5fset',['~sparse_set',['../classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1',1,'entt::sparse_set']]] + ['_7ebasic_5factor_608',['~basic_actor',['../structentt_1_1basic__actor.html#a46dc913885c448e059e9ca7cf3a21221',1,'entt::basic_actor']]], + ['_7ebasic_5fobserver_609',['~basic_observer',['../classentt_1_1basic__observer.html#afb6fbd2a5ce7bc57013b0bd9ad482599',1,'entt::basic_observer']]], + ['_7eemitter_610',['~emitter',['../classentt_1_1emitter.html#a77d175ad8e8060c3628b3fb544cba15f',1,'entt::emitter']]], + ['_7emeta_5fany_611',['~meta_any',['../classentt_1_1meta__any.html#a816dae3d4ed3e41fcb376ec5ec9c38c1',1,'entt::meta_any']]], + ['_7eprocess_612',['~process',['../classentt_1_1process.html#a9280903240c53d1f2c7474ae8ccaa48d',1,'entt::process']]], + ['_7escoped_5fconnection_613',['~scoped_connection',['../structentt_1_1scoped__connection.html#a8bc8b8630e2ad076216b6aca416ce32c',1,'entt::scoped_connection']]], + ['_7eservice_5flocator_614',['~service_locator',['../structentt_1_1service__locator.html#a2cbb6cfc1614067ae92f1c60580236a8',1,'entt::service_locator']]], + ['_7esparse_5fset_615',['~sparse_set',['../classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1',1,'entt::sparse_set']]] ]; diff --git a/search/functions_16.html b/search/functions_16.html new file mode 100644 index 000000000..d1482ef96 --- /dev/null +++ b/search/functions_16.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_16.js b/search/functions_16.js new file mode 100644 index 000000000..a3b472b58 --- /dev/null +++ b/search/functions_16.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['_7ebasic_5factor_598',['~basic_actor',['../structentt_1_1basic__actor.html#a46dc913885c448e059e9ca7cf3a21221',1,'entt::basic_actor']]], + ['_7ebasic_5fobserver_599',['~basic_observer',['../classentt_1_1basic__observer.html#afb6fbd2a5ce7bc57013b0bd9ad482599',1,'entt::basic_observer']]], + ['_7eemitter_600',['~emitter',['../classentt_1_1emitter.html#af3d352c547768be34f03f0fbfdd30b43',1,'entt::emitter']]], + ['_7emeta_5fany_601',['~meta_any',['../classentt_1_1meta__any.html#a816dae3d4ed3e41fcb376ec5ec9c38c1',1,'entt::meta_any']]], + ['_7eprocess_602',['~process',['../classentt_1_1process.html#a2baf1b6aef37c1420a77cd3f8eadcf79',1,'entt::process']]], + ['_7escoped_5fconnection_603',['~scoped_connection',['../structentt_1_1scoped__connection.html#a8bc8b8630e2ad076216b6aca416ce32c',1,'entt::scoped_connection']]], + ['_7eservice_5flocator_604',['~service_locator',['../structentt_1_1service__locator.html#a2cbb6cfc1614067ae92f1c60580236a8',1,'entt::service_locator']]], + ['_7esparse_5fset_605',['~sparse_set',['../classentt_1_1sparse__set.html#a2ea4731d5a2e22f4bd43f8e19ca39f58',1,'entt::sparse_set']]] +]; diff --git a/search/functions_2.html b/search/functions_2.html index ecce2f318..07e3fdad4 100644 --- a/search/functions_2.html +++ b/search/functions_2.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_2.js b/search/functions_2.js index 20397e39b..e12efd21a 100644 --- a/search/functions_2.js +++ b/search/functions_2.js @@ -1,23 +1,23 @@ var searchData= [ - ['cache',['cache',['../structentt_1_1cache.html#a1325fdf2f5645b5abb68184b7927e043',1,'entt::cache::cache()=default'],['../structentt_1_1cache.html#a58384e1a8f11c3055e88911893df4d73',1,'entt::cache::cache(cache &&)=default']]], - ['capacity',['capacity',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a75b0b56face16da50726650622a84e94',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::capacity()'],['../classentt_1_1basic__registry.html#a90147848037f6661c2b7d28fb98dbd61',1,'entt::basic_registry::capacity() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#abde8cee1ff1060eaebae6bef1e6c5e0e',1,'entt::basic_registry::capacity() const ENTT_NOEXCEPT'],['../classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656',1,'entt::sparse_set::capacity()']]], - ['cast',['cast',['../classentt_1_1meta__any.html#a160947a443eca2b61c5bf53f4cb8c6b4',1,'entt::meta_any::cast() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a65793af4f215d84dd42e2d8da82a6057',1,'entt::meta_any::cast() ENTT_NOEXCEPT'],['../structentt_1_1meta__base.html#aa83c9d560b8b684d93f8df90830d6c56',1,'entt::meta_base::cast()']]], - ['cbegin',['cbegin',['../classentt_1_1basic__storage.html#aa5499c18eea80f3c903afef5031abf1b',1,'entt::basic_storage::cbegin()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a4a1f9fe415478f42e27b51ae56a87fcf',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::cbegin()']]], - ['cend',['cend',['../classentt_1_1basic__storage.html#a5fb9f5fd4996f424ab94b70f79b15205',1,'entt::basic_storage::cend()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a0f935bdaca5c82f9d433d349bf28ee89',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::cend()']]], - ['clear',['clear',['../classentt_1_1basic__observer.html#ade730cb09309ed7077616a908b25c2e7',1,'entt::basic_observer::clear()'],['../classentt_1_1scheduler.html#a5a0f92dbe54b58751237a567e86805e0',1,'entt::scheduler::clear()'],['../structentt_1_1cache.html#a8187069bfa98f774b5109558bbd5f859',1,'entt::cache::clear()'],['../classentt_1_1emitter.html#a09386e63b0871a304e295921c574318a',1,'entt::emitter::clear() ENTT_NOEXCEPT'],['../classentt_1_1emitter.html#acedafaefe2c9c91282c84e79aef26a35',1,'entt::emitter::clear() ENTT_NOEXCEPT']]], - ['clone',['clone',['../classentt_1_1basic__registry.html#ad846f4b2f0097d33af598747df1a2365',1,'entt::basic_registry']]], - ['collect',['collect',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a87ff1713373deff0bd7c71f4e0a32fe1',1,'entt::sigh< Ret(Args...)>']]], - ['component',['component',['../classentt_1_1basic__snapshot.html#a59cf70d5b7730d388f3a63845e8faede',1,'entt::basic_snapshot::component(Archive &archive) const'],['../classentt_1_1basic__snapshot.html#a05fff12a4af42f0ad77dc4893856772c',1,'entt::basic_snapshot::component(Archive &archive, It first, It last) const'],['../classentt_1_1basic__snapshot__loader.html#af7352e091c3421432cc2ef77010a0a2d',1,'entt::basic_snapshot_loader::component()'],['../classentt_1_1basic__continuous__loader.html#a315b55f7576992d9261ee812f202d5ad',1,'entt::basic_continuous_loader::component()']]], - ['connect',['connect',['../classentt_1_1basic__observer.html#a7d69a8bc866b01cc677de492bc436209',1,'entt::basic_observer::connect()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a6e732abcbc4aa9b8899c92d8f21e55a6',1,'entt::delegate< Ret(Args...)>::connect() ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#aae828d209ffe33590c2bb8e4b37f47ef',1,'entt::delegate< Ret(Args...)>::connect(Type &value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#afcdce5ab5ae55520cce86f3f79b38e9c',1,'entt::delegate< Ret(Args...)>::connect(Type *value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#af6aaad88082bcdd3eb5788afafb6cc54',1,'entt::sink< Ret(Args...)>::connect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a8ece8c96c845649c3edc06bce75cd7ce',1,'entt::sink< Ret(Args...)>::connect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ae8ac6c23cf042785f627f9d15b943e1c',1,'entt::sink< Ret(Args...)>::connect(Type *value_or_instance)']]], - ['connection',['connection',['../structentt_1_1emitter_1_1connection.html#a846b5190231aee4dd2340ab910adea40',1,'entt::emitter::connection::connection() ENTT_NOEXCEPT=default'],['../structentt_1_1emitter_1_1connection.html#a6497a7521b75836697bf4fb97de246d7',1,'entt::emitter::connection::connection(typename event_handler< Event >::connection_type conn)'],['../classentt_1_1connection.html#a1d11f6b9d00a3f0e5364111438a1cee5',1,'entt::connection::connection()=default'],['../classentt_1_1connection.html#a96098253d2abdc1a6bc3770b2914feb5',1,'entt::connection::connection(const connection &)=default'],['../classentt_1_1connection.html#a382faa75cdfc741f36ff433b6c72550d',1,'entt::connection::connection(connection &&other)']]], - ['construct',['construct',['../classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f',1,'entt::sparse_set::construct()'],['../classentt_1_1basic__storage.html#a4cf7d707b57b6dd63c4d7852a23b6f5e',1,'entt::basic_storage::construct()'],['../classentt_1_1meta__type.html#ad9c9a821b8047a5b48efadd2a045da2a',1,'entt::meta_type::construct()']]], - ['contains',['contains',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a2e5841cfbbad8dbcf4311e60d09a8816',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::contains()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a20768da49ef9b9dc4cd8d35e22009819',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::contains()'],['../classentt_1_1basic__runtime__view.html#a3754c1d13392fc18daaf2003867a64fd',1,'entt::basic_runtime_view::contains()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ad06b6b506987ebf64d7d8ea017b1e9d7',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::contains()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a90aa545d2da9c46ec4c43d74f2a35b44',1,'entt::basic_view< Entity, exclude_t<>, Component >::contains()'],['../structentt_1_1cache.html#a36b26b47cd9aa4564e9acc533b62105b',1,'entt::cache::contains()']]], - ['conv',['conv',['../classentt_1_1meta__factory.html#ad4245f8f4aa5209fbd8f48fbba195c7b',1,'entt::meta_factory::conv() ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#ad4245f8f4aa5209fbd8f48fbba195c7b',1,'entt::meta_factory::conv() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a148df7974d347bc1b4c9cad9f30c51ef',1,'entt::meta_type::conv(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae6ea2662ab2d241577d0c1f51b7b97d0',1,'entt::meta_type::conv() const ENTT_NOEXCEPT']]], - ['convert',['convert',['../classentt_1_1meta__any.html#a3d45a3781d92493250d065ea900b8d70',1,'entt::meta_any::convert() const'],['../classentt_1_1meta__any.html#a7808deb0d8926b75fa173d1e193a2597',1,'entt::meta_any::convert()'],['../structentt_1_1meta__conv.html#acd513d5e76857918ecb6208f79c0b309',1,'entt::meta_conv::convert()']]], - ['create',['create',['../classentt_1_1basic__registry.html#a32d0bb4c8ad63d78c8ae455dfeb02c59',1,'entt::basic_registry::create()'],['../classentt_1_1basic__registry.html#a3dc6b7ace48533c41cf0fb28a4b0a36c',1,'entt::basic_registry::create(It first, It last)'],['../classentt_1_1basic__registry.html#a9e5762d177eff276d66b10a7ed89c59f',1,'entt::basic_registry::create(entity_type src, const basic_registry &other, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a90e546bffd4d75460cfd18e4f0fc624d',1,'entt::basic_registry::create(It first, It last, entity_type src, const basic_registry &other, exclude_t< Exclude... >={})']]], - ['ctor',['ctor',['../classentt_1_1meta__factory.html#a29514cae07fc5df16b6c73ffb5ffa73b',1,'entt::meta_factory::ctor() ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#ab9206cfe67bec72e6bfce975fbf5b955',1,'entt::meta_factory::ctor() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a527e242b24025efb218a7936bb82955e',1,'entt::meta_type::ctor(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a19e66bc8271fac7f72413c09922fbc32',1,'entt::meta_type::ctor() const ENTT_NOEXCEPT']]], - ['ctx',['ctx',['../classentt_1_1basic__registry.html#ac53dddfa495bb678debd98ecc2720e6d',1,'entt::basic_registry::ctx() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#af887e7939d4b09c4634bcb24e817170b',1,'entt::basic_registry::ctx() ENTT_NOEXCEPT']]], - ['ctx_5for_5fset',['ctx_or_set',['../classentt_1_1basic__registry.html#a16f2019558eb620c5054dc8f2e312b9e',1,'entt::basic_registry']]], - ['current',['current',['../classentt_1_1basic__registry.html#ad3e60af648b0b602527dbb6ea17e95c4',1,'entt::basic_registry']]] + ['cache_448',['cache',['../structentt_1_1cache.html#a1325fdf2f5645b5abb68184b7927e043',1,'entt::cache::cache()=default'],['../structentt_1_1cache.html#a58384e1a8f11c3055e88911893df4d73',1,'entt::cache::cache(cache &&)=default']]], + ['capacity_449',['capacity',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a75b0b56face16da50726650622a84e94',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::capacity()'],['../classentt_1_1basic__registry.html#a90147848037f6661c2b7d28fb98dbd61',1,'entt::basic_registry::capacity() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#abde8cee1ff1060eaebae6bef1e6c5e0e',1,'entt::basic_registry::capacity() const ENTT_NOEXCEPT'],['../classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656',1,'entt::sparse_set::capacity()']]], + ['cast_450',['cast',['../classentt_1_1meta__any.html#a160947a443eca2b61c5bf53f4cb8c6b4',1,'entt::meta_any::cast() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a65793af4f215d84dd42e2d8da82a6057',1,'entt::meta_any::cast() ENTT_NOEXCEPT'],['../structentt_1_1meta__base.html#aa83c9d560b8b684d93f8df90830d6c56',1,'entt::meta_base::cast()']]], + ['cbegin_451',['cbegin',['../classentt_1_1basic__storage.html#aa5499c18eea80f3c903afef5031abf1b',1,'entt::basic_storage::cbegin()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a4a1f9fe415478f42e27b51ae56a87fcf',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::cbegin()']]], + ['cend_452',['cend',['../classentt_1_1basic__storage.html#a5fb9f5fd4996f424ab94b70f79b15205',1,'entt::basic_storage::cend()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a0f935bdaca5c82f9d433d349bf28ee89',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::cend()']]], + ['clear_453',['clear',['../classentt_1_1basic__observer.html#ade730cb09309ed7077616a908b25c2e7',1,'entt::basic_observer::clear()'],['../classentt_1_1scheduler.html#a5a0f92dbe54b58751237a567e86805e0',1,'entt::scheduler::clear()'],['../structentt_1_1cache.html#a8187069bfa98f774b5109558bbd5f859',1,'entt::cache::clear()'],['../classentt_1_1emitter.html#a09386e63b0871a304e295921c574318a',1,'entt::emitter::clear() ENTT_NOEXCEPT'],['../classentt_1_1emitter.html#acedafaefe2c9c91282c84e79aef26a35',1,'entt::emitter::clear() ENTT_NOEXCEPT']]], + ['clone_454',['clone',['../classentt_1_1basic__registry.html#ad846f4b2f0097d33af598747df1a2365',1,'entt::basic_registry']]], + ['collect_455',['collect',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a87ff1713373deff0bd7c71f4e0a32fe1',1,'entt::sigh< Ret(Args...)>']]], + ['component_456',['component',['../classentt_1_1basic__snapshot.html#a59cf70d5b7730d388f3a63845e8faede',1,'entt::basic_snapshot::component(Archive &archive) const'],['../classentt_1_1basic__snapshot.html#a05fff12a4af42f0ad77dc4893856772c',1,'entt::basic_snapshot::component(Archive &archive, It first, It last) const'],['../classentt_1_1basic__snapshot__loader.html#af7352e091c3421432cc2ef77010a0a2d',1,'entt::basic_snapshot_loader::component()'],['../classentt_1_1basic__continuous__loader.html#a315b55f7576992d9261ee812f202d5ad',1,'entt::basic_continuous_loader::component()']]], + ['connect_457',['connect',['../classentt_1_1basic__observer.html#a7d69a8bc866b01cc677de492bc436209',1,'entt::basic_observer::connect()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a6e732abcbc4aa9b8899c92d8f21e55a6',1,'entt::delegate< Ret(Args...)>::connect() ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#aae828d209ffe33590c2bb8e4b37f47ef',1,'entt::delegate< Ret(Args...)>::connect(Type &value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#afcdce5ab5ae55520cce86f3f79b38e9c',1,'entt::delegate< Ret(Args...)>::connect(Type *value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#af6aaad88082bcdd3eb5788afafb6cc54',1,'entt::sink< Ret(Args...)>::connect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a8ece8c96c845649c3edc06bce75cd7ce',1,'entt::sink< Ret(Args...)>::connect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ae8ac6c23cf042785f627f9d15b943e1c',1,'entt::sink< Ret(Args...)>::connect(Type *value_or_instance)']]], + ['connection_458',['connection',['../structentt_1_1emitter_1_1connection.html#a846b5190231aee4dd2340ab910adea40',1,'entt::emitter::connection::connection() ENTT_NOEXCEPT=default'],['../structentt_1_1emitter_1_1connection.html#a6497a7521b75836697bf4fb97de246d7',1,'entt::emitter::connection::connection(typename event_handler< Event >::connection_type conn)'],['../classentt_1_1connection.html#a1d11f6b9d00a3f0e5364111438a1cee5',1,'entt::connection::connection()=default'],['../classentt_1_1connection.html#a96098253d2abdc1a6bc3770b2914feb5',1,'entt::connection::connection(const connection &)=default'],['../classentt_1_1connection.html#a382faa75cdfc741f36ff433b6c72550d',1,'entt::connection::connection(connection &&other)']]], + ['construct_459',['construct',['../classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f',1,'entt::sparse_set::construct()'],['../classentt_1_1basic__storage.html#a4cf7d707b57b6dd63c4d7852a23b6f5e',1,'entt::basic_storage::construct()'],['../classentt_1_1meta__type.html#ad9c9a821b8047a5b48efadd2a045da2a',1,'entt::meta_type::construct()']]], + ['contains_460',['contains',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a2e5841cfbbad8dbcf4311e60d09a8816',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::contains()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a20768da49ef9b9dc4cd8d35e22009819',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::contains()'],['../classentt_1_1basic__runtime__view.html#a3754c1d13392fc18daaf2003867a64fd',1,'entt::basic_runtime_view::contains()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ad06b6b506987ebf64d7d8ea017b1e9d7',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::contains()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a90aa545d2da9c46ec4c43d74f2a35b44',1,'entt::basic_view< Entity, exclude_t<>, Component >::contains()'],['../structentt_1_1cache.html#a36b26b47cd9aa4564e9acc533b62105b',1,'entt::cache::contains()']]], + ['conv_461',['conv',['../classentt_1_1meta__factory.html#ad4245f8f4aa5209fbd8f48fbba195c7b',1,'entt::meta_factory::conv() ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#ad4245f8f4aa5209fbd8f48fbba195c7b',1,'entt::meta_factory::conv() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a148df7974d347bc1b4c9cad9f30c51ef',1,'entt::meta_type::conv(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae6ea2662ab2d241577d0c1f51b7b97d0',1,'entt::meta_type::conv() const ENTT_NOEXCEPT']]], + ['convert_462',['convert',['../classentt_1_1meta__any.html#a3d45a3781d92493250d065ea900b8d70',1,'entt::meta_any::convert() const'],['../classentt_1_1meta__any.html#a7808deb0d8926b75fa173d1e193a2597',1,'entt::meta_any::convert()'],['../structentt_1_1meta__conv.html#acd513d5e76857918ecb6208f79c0b309',1,'entt::meta_conv::convert()']]], + ['create_463',['create',['../classentt_1_1basic__registry.html#a32d0bb4c8ad63d78c8ae455dfeb02c59',1,'entt::basic_registry::create()'],['../classentt_1_1basic__registry.html#a3dc6b7ace48533c41cf0fb28a4b0a36c',1,'entt::basic_registry::create(It first, It last)'],['../classentt_1_1basic__registry.html#a9e5762d177eff276d66b10a7ed89c59f',1,'entt::basic_registry::create(entity_type src, const basic_registry &other, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a90e546bffd4d75460cfd18e4f0fc624d',1,'entt::basic_registry::create(It first, It last, entity_type src, const basic_registry &other, exclude_t< Exclude... >={})']]], + ['ctor_464',['ctor',['../classentt_1_1meta__factory.html#a29514cae07fc5df16b6c73ffb5ffa73b',1,'entt::meta_factory::ctor() ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#ab9206cfe67bec72e6bfce975fbf5b955',1,'entt::meta_factory::ctor() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a527e242b24025efb218a7936bb82955e',1,'entt::meta_type::ctor(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a19e66bc8271fac7f72413c09922fbc32',1,'entt::meta_type::ctor() const ENTT_NOEXCEPT']]], + ['ctx_465',['ctx',['../classentt_1_1basic__registry.html#ac53dddfa495bb678debd98ecc2720e6d',1,'entt::basic_registry::ctx() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#af887e7939d4b09c4634bcb24e817170b',1,'entt::basic_registry::ctx() ENTT_NOEXCEPT']]], + ['ctx_5for_5fset_466',['ctx_or_set',['../classentt_1_1basic__registry.html#a16f2019558eb620c5054dc8f2e312b9e',1,'entt::basic_registry']]], + ['current_467',['current',['../classentt_1_1basic__registry.html#ad3e60af648b0b602527dbb6ea17e95c4',1,'entt::basic_registry']]] ]; diff --git a/search/functions_3.html b/search/functions_3.html index 15f06abdc..40bd389ee 100644 --- a/search/functions_3.html +++ b/search/functions_3.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_3.js b/search/functions_3.js index 94f787ec1..da6aaa2d5 100644 --- a/search/functions_3.js +++ b/search/functions_3.js @@ -1,11 +1,11 @@ var searchData= [ - ['data',['data',['../classentt_1_1basic__hashed__string.html#a7ef3ad96865551846e584780146d3d24',1,'entt::basic_hashed_string::data()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ad962c0369c08227244cea35d9a72de1a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6ce0cb9d71aee58db0b1bc7fc8dacfe0',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a15cbbf28224ee70ff5bf4143c673e310',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a50c2cb5276b7784011db9e937f31ada2',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#a435ebcce2d35f39b9f19ad84ffcdb4ea',1,'entt::basic_observer::data()'],['../classentt_1_1basic__registry.html#a79d6af03e34feae7123b924b50a91ca9',1,'entt::basic_registry::data()'],['../classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f',1,'entt::sparse_set::data()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ab976959d36185f41abaa81fe482c1def',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::data()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a1cb3cdf5882c092430ad0651e6d6094c',1,'entt::basic_view< Entity, exclude_t<>, Component >::data()'],['../classentt_1_1meta__factory.html#a66b918efd96f694b3f22d2aa5bd76584',1,'entt::meta_factory::data(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#a0e7f9e39eb31bff6e16f432488ec046a',1,'entt::meta_factory::data(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a427ee14f12077f8634919fa5c501f93a',1,'entt::meta_any::data() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a2726c037b90fef702cc90eb54e741b49',1,'entt::meta_any::data() ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a07e72402cf9163c50472b201f9c130d5',1,'entt::meta_handle::data() const ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a3f9f079820d1bcd1d987e6c2c91a733f',1,'entt::meta_handle::data() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae7ddcf22f26b4f32ca83e82cb6159c46',1,'entt::meta_type::data(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a2dc0e5378af5430c52ebb3d67d5d51a3',1,'entt::meta_type::data(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]], - ['dead',['dead',['../classentt_1_1process.html#ad83f2550ca63e03af126a07e4ae5d9dd',1,'entt::process']]], - ['delegate',['delegate',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a5c4828a5df5ed1e8fd18465ff63eb73c',1,'entt::delegate< Ret(Args...)>::delegate() ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#ad07c76f552619d55edc17a3722958215',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Function >) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a24fbe634fda0fe5c67ec6deba0deaa66',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Candidate >, Type &value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3c3391085b16cba9024b4bbb372f7326',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Candidate >, Type *value_or_instance) ENTT_NOEXCEPT'],['../namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb',1,'entt::delegate(connect_arg_t< Function >) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>'],['../namespaceentt.html#acc75657ea551a0eecc3a3a5ed5224240',1,'entt::delegate(connect_arg_t< Candidate >, Type &) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type *>>>'],['../namespaceentt.html#a813f381cc1813a3efb62bda7a3af591d',1,'entt::delegate(connect_arg_t< Candidate >, Type *) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type *>>>']]], - ['destroy',['destroy',['../classentt_1_1basic__registry.html#af58f3add442cfb3f1fa470402db072bd',1,'entt::basic_registry::destroy(const entity_type entity)'],['../classentt_1_1basic__registry.html#a6c163dcc335da90e727e2f40e67973b7',1,'entt::basic_registry::destroy(It first, It last)'],['../classentt_1_1sparse__set.html#ab69719626bee1add76096046db86a170',1,'entt::sparse_set::destroy()'],['../classentt_1_1basic__storage.html#ab59f0a70b5d25e66062e5ae5b501ab41',1,'entt::basic_storage::destroy()'],['../classentt_1_1meta__type.html#ad91cc02c03b339a9917d5d65305c29b2',1,'entt::meta_type::destroy()']]], - ['destroyed',['destroyed',['../classentt_1_1basic__snapshot.html#a7a26ec6a9bc937a7d71b1a4723bdf4c7',1,'entt::basic_snapshot::destroyed()'],['../classentt_1_1basic__snapshot__loader.html#a49128534d0d232dd4c380513dca345c0',1,'entt::basic_snapshot_loader::destroyed()'],['../classentt_1_1basic__continuous__loader.html#a368a3a5f63c99637ee456668dab1ef36',1,'entt::basic_continuous_loader::destroyed()']]], - ['discard',['discard',['../structentt_1_1cache.html#ad8d5b0d6ba34267b3150de559e3f028f',1,'entt::cache::discard()'],['../classentt_1_1dispatcher.html#a83958d3ca4b5ec11eca0c3b8eb591822',1,'entt::dispatcher::discard()']]], - ['disconnect',['disconnect',['../classentt_1_1basic__observer.html#a1337e8f885ca963383e5a3ed2a354955',1,'entt::basic_observer::disconnect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ab0186e5614c746b3355119a8f1abc9d1',1,'entt::sink< Ret(Args...)>::disconnect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a160d7e44b3ed3a395f3599942716a050',1,'entt::sink< Ret(Args...)>::disconnect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a61c6229967be2d84576ee933fd67940e',1,'entt::sink< Ret(Args...)>::disconnect(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a6458671dfeb3dcc3cf30c9ffc4a580d8',1,'entt::sink< Ret(Args...)>::disconnect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ae5ee15c3d483a1bd4519d4e2398a3515',1,'entt::sink< Ret(Args...)>::disconnect(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a1f9b66d606a004485f535997c96c231a',1,'entt::sink< Ret(Args...)>::disconnect()']]], - ['dtor',['dtor',['../classentt_1_1meta__factory.html#a754b47db9b2432042d7ac23e480fdc4b',1,'entt::meta_factory::dtor()'],['../classentt_1_1meta__type.html#a0f36a3011bce598684c673a2e7734163',1,'entt::meta_type::dtor()']]] + ['data_468',['data',['../classentt_1_1basic__hashed__string.html#a7ef3ad96865551846e584780146d3d24',1,'entt::basic_hashed_string::data()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ad962c0369c08227244cea35d9a72de1a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6ce0cb9d71aee58db0b1bc7fc8dacfe0',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a15cbbf28224ee70ff5bf4143c673e310',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a50c2cb5276b7784011db9e937f31ada2',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::data() const ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#a435ebcce2d35f39b9f19ad84ffcdb4ea',1,'entt::basic_observer::data()'],['../classentt_1_1basic__registry.html#a79d6af03e34feae7123b924b50a91ca9',1,'entt::basic_registry::data()'],['../classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f',1,'entt::sparse_set::data()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ab976959d36185f41abaa81fe482c1def',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::data()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a1cb3cdf5882c092430ad0651e6d6094c',1,'entt::basic_view< Entity, exclude_t<>, Component >::data()'],['../classentt_1_1meta__factory.html#a66b918efd96f694b3f22d2aa5bd76584',1,'entt::meta_factory::data(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__factory.html#a0e7f9e39eb31bff6e16f432488ec046a',1,'entt::meta_factory::data(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a427ee14f12077f8634919fa5c501f93a',1,'entt::meta_any::data() const ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a2726c037b90fef702cc90eb54e741b49',1,'entt::meta_any::data() ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a07e72402cf9163c50472b201f9c130d5',1,'entt::meta_handle::data() const ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a3f9f079820d1bcd1d987e6c2c91a733f',1,'entt::meta_handle::data() ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#ae7ddcf22f26b4f32ca83e82cb6159c46',1,'entt::meta_type::data(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a2dc0e5378af5430c52ebb3d67d5d51a3',1,'entt::meta_type::data(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]], + ['dead_469',['dead',['../classentt_1_1process.html#ad83f2550ca63e03af126a07e4ae5d9dd',1,'entt::process']]], + ['delegate_470',['delegate',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a5c4828a5df5ed1e8fd18465ff63eb73c',1,'entt::delegate< Ret(Args...)>::delegate() ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#ad07c76f552619d55edc17a3722958215',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Function >) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a24fbe634fda0fe5c67ec6deba0deaa66',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Candidate >, Type &value_or_instance) ENTT_NOEXCEPT'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3c3391085b16cba9024b4bbb372f7326',1,'entt::delegate< Ret(Args...)>::delegate(connect_arg_t< Candidate >, Type *value_or_instance) ENTT_NOEXCEPT'],['../namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb',1,'entt::delegate(connect_arg_t< Function >) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>'],['../namespaceentt.html#ab2aa16e80c9720d136758f070db799ef',1,'entt::delegate(connect_arg_t< Candidate >, Type &) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type * >>>'],['../namespaceentt.html#a562674030295e4dfd8bdd47b4a332b80',1,'entt::delegate(connect_arg_t< Candidate >, Type *) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Candidate), Type * >>>']]], + ['destroy_471',['destroy',['../classentt_1_1basic__registry.html#af58f3add442cfb3f1fa470402db072bd',1,'entt::basic_registry::destroy(const entity_type entity)'],['../classentt_1_1basic__registry.html#a6c163dcc335da90e727e2f40e67973b7',1,'entt::basic_registry::destroy(It first, It last)'],['../classentt_1_1sparse__set.html#ab69719626bee1add76096046db86a170',1,'entt::sparse_set::destroy()'],['../classentt_1_1basic__storage.html#ab59f0a70b5d25e66062e5ae5b501ab41',1,'entt::basic_storage::destroy()'],['../classentt_1_1meta__type.html#ad91cc02c03b339a9917d5d65305c29b2',1,'entt::meta_type::destroy()']]], + ['destroyed_472',['destroyed',['../classentt_1_1basic__snapshot.html#a7a26ec6a9bc937a7d71b1a4723bdf4c7',1,'entt::basic_snapshot::destroyed()'],['../classentt_1_1basic__snapshot__loader.html#a49128534d0d232dd4c380513dca345c0',1,'entt::basic_snapshot_loader::destroyed()'],['../classentt_1_1basic__continuous__loader.html#a368a3a5f63c99637ee456668dab1ef36',1,'entt::basic_continuous_loader::destroyed()']]], + ['discard_473',['discard',['../structentt_1_1cache.html#ad8d5b0d6ba34267b3150de559e3f028f',1,'entt::cache::discard()'],['../classentt_1_1dispatcher.html#a83958d3ca4b5ec11eca0c3b8eb591822',1,'entt::dispatcher::discard()']]], + ['disconnect_474',['disconnect',['../classentt_1_1basic__observer.html#a1337e8f885ca963383e5a3ed2a354955',1,'entt::basic_observer::disconnect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ab0186e5614c746b3355119a8f1abc9d1',1,'entt::sink< Ret(Args...)>::disconnect()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a160d7e44b3ed3a395f3599942716a050',1,'entt::sink< Ret(Args...)>::disconnect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a61c6229967be2d84576ee933fd67940e',1,'entt::sink< Ret(Args...)>::disconnect(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a6458671dfeb3dcc3cf30c9ffc4a580d8',1,'entt::sink< Ret(Args...)>::disconnect(Type &value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#ae5ee15c3d483a1bd4519d4e2398a3515',1,'entt::sink< Ret(Args...)>::disconnect(Type *value_or_instance)'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a1f9b66d606a004485f535997c96c231a',1,'entt::sink< Ret(Args...)>::disconnect()']]], + ['dtor_475',['dtor',['../classentt_1_1meta__factory.html#a754b47db9b2432042d7ac23e480fdc4b',1,'entt::meta_factory::dtor()'],['../classentt_1_1meta__type.html#a0f36a3011bce598684c673a2e7734163',1,'entt::meta_type::dtor()']]] ]; diff --git a/search/functions_4.html b/search/functions_4.html index 8985ff278..8a4df4cdc 100644 --- a/search/functions_4.html +++ b/search/functions_4.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_4.js b/search/functions_4.js index c74fb57ef..bcf1a6277 100644 --- a/search/functions_4.js +++ b/search/functions_4.js @@ -1,15 +1,15 @@ var searchData= [ - ['each',['each',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#afb66d4717f6b9e4a19c586eb522544b7',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::each()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#abd465a5a0743b54cac72bf0d9163b7f4',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::each()'],['../classentt_1_1basic__observer.html#a181a6724835a3a41e33610003f738525',1,'entt::basic_observer::each(Func func) const'],['../classentt_1_1basic__observer.html#a535f3ddf32641a54e1c8861519933c97',1,'entt::basic_observer::each(Func func)'],['../classentt_1_1basic__registry.html#a86d2b035f54225d82548e8f03de28754',1,'entt::basic_registry::each()'],['../classentt_1_1basic__runtime__view.html#a79fe059a28f768f4dc82edf48438cce0',1,'entt::basic_runtime_view::each()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a6ebf8c6fde33027be282b12707cabd94',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::each(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ae22863700fe1d7fd7c01f5dc0acdf3c2',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::each(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae0e899f8d7e4a58bba6abc9c5b9b83c2',1,'entt::basic_view< Entity, exclude_t<>, Component >::each()'],['../structentt_1_1cache.html#a6581bd315d1627ab2d4bff995802fef8',1,'entt::cache::each()']]], - ['emitter',['emitter',['../classentt_1_1emitter.html#a9c2e7d7eb8accd1d71e8aacce404e4d9',1,'entt::emitter::emitter() ENTT_NOEXCEPT=default'],['../classentt_1_1emitter.html#a842fef69b914a160b0bcc211bb77b27b',1,'entt::emitter::emitter(emitter &&)=default']]], - ['emplace',['emplace',['../classentt_1_1meta__any.html#a5b214afbab6c460f91fa050118bf1e86',1,'entt::meta_any']]], - ['empty',['empty',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a3cd0ed624125b56cf2dacd9b06d6fff6',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::empty()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#adb2cd73ac05ceb1f81c97abbf8768b31',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::empty()'],['../classentt_1_1basic__observer.html#a0986b7af08f9b1bc70bd01b9bbe66cc4',1,'entt::basic_observer::empty()'],['../classentt_1_1basic__registry.html#af78aafdf9439c8535a2652b258a3720b',1,'entt::basic_registry::empty()'],['../classentt_1_1basic__runtime__view.html#a2483047bb494ac1bea3b1823bec87985',1,'entt::basic_runtime_view::empty()'],['../classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e',1,'entt::sparse_set::empty()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a83a27c7022e24788bb742f3a4ca07475',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::empty()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a155822d1b039f427ef7577547ea06783',1,'entt::basic_view< Entity, exclude_t<>, Component >::empty()'],['../structentt_1_1service__locator.html#a9265b7273a758003283a79f7a4de6250',1,'entt::service_locator::empty()'],['../classentt_1_1scheduler.html#a817d93653aec6a479b920143bd21edbb',1,'entt::scheduler::empty()'],['../structentt_1_1cache.html#add6b60d473f777208e1585d7318c642c',1,'entt::cache::empty()'],['../classentt_1_1emitter.html#a841edafebf32b85da11657578e887961',1,'entt::emitter::empty() const ENTT_NOEXCEPT'],['../classentt_1_1emitter.html#afbac9d6fb49c28f06cb382715ed92ab9',1,'entt::emitter::empty() const ENTT_NOEXCEPT'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a3e5ae937a84fe875045efaa4294f7fe1',1,'entt::sigh< Ret(Args...)>::empty()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a07679954660265dfbcffa34a25a6033f',1,'entt::sink< Ret(Args...)>::empty()']]], - ['end',['end',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ace576f925639c740718a5c67cdaf443a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::end()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a9f29253a8f7a4cf2972b1b073bcdf3b2',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::end()'],['../classentt_1_1basic__observer.html#afe16c233c8795aa7341d61cf86c1d2d7',1,'entt::basic_observer::end()'],['../classentt_1_1basic__runtime__view.html#a777a70d6c1905a32b8a68b0b87cc9b85',1,'entt::basic_runtime_view::end()'],['../classentt_1_1sparse__set.html#a69d6c1288f673c6f92d2b1b028d6aa75',1,'entt::sparse_set::end()'],['../classentt_1_1basic__storage.html#a43640288a074495b549779ad271d7010',1,'entt::basic_storage::end() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a9922f88c0ed8f587ff4ae09745f67ae9',1,'entt::basic_storage::end() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a8ae4c428b741e0ebd29b45e5a872a8ac',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::end()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#aa843ab06756af9c8246544760ef96c59',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::end()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a91221211aded079c263eaf8e2031e441',1,'entt::basic_view< Entity, exclude_t<>, Component >::end()']]], - ['enqueue',['enqueue',['../classentt_1_1dispatcher.html#ab41d56a73b6bdc64f0862abd333ea701',1,'entt::dispatcher::enqueue(Args &&... args)'],['../classentt_1_1dispatcher.html#a1e0a488354698cbf3cba82396ac4b76e',1,'entt::dispatcher::enqueue(Event &&event)']]], - ['entities',['entities',['../classentt_1_1basic__snapshot.html#a79fe1641f3b448b37b8aecfcabf52a5e',1,'entt::basic_snapshot::entities()'],['../classentt_1_1basic__snapshot__loader.html#a0ee608c24b47e2f54a1224177a0dc741',1,'entt::basic_snapshot_loader::entities()'],['../classentt_1_1basic__continuous__loader.html#ae6655c1c6868b11f2781cec2aee77abb',1,'entt::basic_continuous_loader::entities()']]], - ['entity',['entity',['../structentt_1_1basic__actor.html#af92d62c39e122692addbfd6b75ea6922',1,'entt::basic_actor::entity()'],['../classentt_1_1basic__registry.html#a5d07b2e0105da47d25ceef530d91bb8b',1,'entt::basic_registry::entity()']]], - ['entt_5fopaque_5ftype',['ENTT_OPAQUE_TYPE',['../namespaceentt.html#a30eed5a712064c8979741cdd932c1676',1,'entt::ENTT_OPAQUE_TYPE(entity, ENTT_ID_TYPE)'],['../namespaceentt.html#a96fad46bc9a218fdab0d9e9f85b772c8',1,'entt::ENTT_OPAQUE_TYPE(component, ENTT_ID_TYPE)']]], - ['erase',['erase',['../classentt_1_1emitter.html#a14409e5061892c1342924b25f4ec2a0c',1,'entt::emitter']]], - ['extended_5fmeta_5ffactory',['extended_meta_factory',['../classentt_1_1extended__meta__factory.html#aa87f603531373ae59cdcc36e34ff6300',1,'entt::extended_meta_factory']]], - ['extent',['extent',['../classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0',1,'entt::sparse_set::extent()'],['../classentt_1_1meta__type.html#a4eadf479b9b7f11879a24e0e76d5cd51',1,'entt::meta_type::extent()']]] + ['each_476',['each',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#afb66d4717f6b9e4a19c586eb522544b7',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::each()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#abd465a5a0743b54cac72bf0d9163b7f4',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::each()'],['../classentt_1_1basic__observer.html#a181a6724835a3a41e33610003f738525',1,'entt::basic_observer::each(Func func) const'],['../classentt_1_1basic__observer.html#a535f3ddf32641a54e1c8861519933c97',1,'entt::basic_observer::each(Func func)'],['../classentt_1_1basic__registry.html#a86d2b035f54225d82548e8f03de28754',1,'entt::basic_registry::each()'],['../classentt_1_1basic__runtime__view.html#a79fe059a28f768f4dc82edf48438cce0',1,'entt::basic_runtime_view::each()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a6ebf8c6fde33027be282b12707cabd94',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::each(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ae22863700fe1d7fd7c01f5dc0acdf3c2',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::each(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae0e899f8d7e4a58bba6abc9c5b9b83c2',1,'entt::basic_view< Entity, exclude_t<>, Component >::each()'],['../structentt_1_1cache.html#a6581bd315d1627ab2d4bff995802fef8',1,'entt::cache::each()']]], + ['emitter_477',['emitter',['../classentt_1_1emitter.html#a9c2e7d7eb8accd1d71e8aacce404e4d9',1,'entt::emitter::emitter() ENTT_NOEXCEPT=default'],['../classentt_1_1emitter.html#a842fef69b914a160b0bcc211bb77b27b',1,'entt::emitter::emitter(emitter &&)=default']]], + ['emplace_478',['emplace',['../classentt_1_1meta__any.html#a5b214afbab6c460f91fa050118bf1e86',1,'entt::meta_any']]], + ['empty_479',['empty',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a3cd0ed624125b56cf2dacd9b06d6fff6',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::empty()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#adb2cd73ac05ceb1f81c97abbf8768b31',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::empty()'],['../classentt_1_1basic__observer.html#a0986b7af08f9b1bc70bd01b9bbe66cc4',1,'entt::basic_observer::empty()'],['../classentt_1_1basic__registry.html#af78aafdf9439c8535a2652b258a3720b',1,'entt::basic_registry::empty()'],['../classentt_1_1basic__runtime__view.html#a2483047bb494ac1bea3b1823bec87985',1,'entt::basic_runtime_view::empty()'],['../classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e',1,'entt::sparse_set::empty()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a83a27c7022e24788bb742f3a4ca07475',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::empty()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a155822d1b039f427ef7577547ea06783',1,'entt::basic_view< Entity, exclude_t<>, Component >::empty()'],['../structentt_1_1service__locator.html#a9265b7273a758003283a79f7a4de6250',1,'entt::service_locator::empty()'],['../classentt_1_1scheduler.html#a817d93653aec6a479b920143bd21edbb',1,'entt::scheduler::empty()'],['../structentt_1_1cache.html#add6b60d473f777208e1585d7318c642c',1,'entt::cache::empty()'],['../classentt_1_1emitter.html#a841edafebf32b85da11657578e887961',1,'entt::emitter::empty() const ENTT_NOEXCEPT'],['../classentt_1_1emitter.html#afbac9d6fb49c28f06cb382715ed92ab9',1,'entt::emitter::empty() const ENTT_NOEXCEPT'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a3e5ae937a84fe875045efaa4294f7fe1',1,'entt::sigh< Ret(Args...)>::empty()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a07679954660265dfbcffa34a25a6033f',1,'entt::sink< Ret(Args...)>::empty()']]], + ['end_480',['end',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ace576f925639c740718a5c67cdaf443a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::end()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a9f29253a8f7a4cf2972b1b073bcdf3b2',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::end()'],['../classentt_1_1basic__observer.html#afe16c233c8795aa7341d61cf86c1d2d7',1,'entt::basic_observer::end()'],['../classentt_1_1basic__runtime__view.html#a777a70d6c1905a32b8a68b0b87cc9b85',1,'entt::basic_runtime_view::end()'],['../classentt_1_1sparse__set.html#a69d6c1288f673c6f92d2b1b028d6aa75',1,'entt::sparse_set::end()'],['../classentt_1_1basic__storage.html#a43640288a074495b549779ad271d7010',1,'entt::basic_storage::end() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a9922f88c0ed8f587ff4ae09745f67ae9',1,'entt::basic_storage::end() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a8ae4c428b741e0ebd29b45e5a872a8ac',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::end()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#aa843ab06756af9c8246544760ef96c59',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::end()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a91221211aded079c263eaf8e2031e441',1,'entt::basic_view< Entity, exclude_t<>, Component >::end()']]], + ['enqueue_481',['enqueue',['../classentt_1_1dispatcher.html#ab41d56a73b6bdc64f0862abd333ea701',1,'entt::dispatcher::enqueue(Args &&... args)'],['../classentt_1_1dispatcher.html#a1e0a488354698cbf3cba82396ac4b76e',1,'entt::dispatcher::enqueue(Event &&event)']]], + ['entities_482',['entities',['../classentt_1_1basic__snapshot.html#a79fe1641f3b448b37b8aecfcabf52a5e',1,'entt::basic_snapshot::entities()'],['../classentt_1_1basic__snapshot__loader.html#a0ee608c24b47e2f54a1224177a0dc741',1,'entt::basic_snapshot_loader::entities()'],['../classentt_1_1basic__continuous__loader.html#ae6655c1c6868b11f2781cec2aee77abb',1,'entt::basic_continuous_loader::entities()']]], + ['entity_483',['entity',['../structentt_1_1basic__actor.html#af92d62c39e122692addbfd6b75ea6922',1,'entt::basic_actor::entity()'],['../classentt_1_1basic__registry.html#a5d07b2e0105da47d25ceef530d91bb8b',1,'entt::basic_registry::entity()']]], + ['entt_5fopaque_5ftype_484',['ENTT_OPAQUE_TYPE',['../namespaceentt.html#a30eed5a712064c8979741cdd932c1676',1,'entt::ENTT_OPAQUE_TYPE(entity, ENTT_ID_TYPE)'],['../namespaceentt.html#a96fad46bc9a218fdab0d9e9f85b772c8',1,'entt::ENTT_OPAQUE_TYPE(component, ENTT_ID_TYPE)']]], + ['erase_485',['erase',['../classentt_1_1emitter.html#a14409e5061892c1342924b25f4ec2a0c',1,'entt::emitter']]], + ['extended_5fmeta_5ffactory_486',['extended_meta_factory',['../classentt_1_1extended__meta__factory.html#aa87f603531373ae59cdcc36e34ff6300',1,'entt::extended_meta_factory']]], + ['extent_487',['extent',['../classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0',1,'entt::sparse_set::extent()'],['../classentt_1_1meta__type.html#a4eadf479b9b7f11879a24e0e76d5cd51',1,'entt::meta_type::extent()']]] ]; diff --git a/search/functions_5.html b/search/functions_5.html index 03149184b..2b983b214 100644 --- a/search/functions_5.html +++ b/search/functions_5.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_5.js b/search/functions_5.js index f6ef90c17..34a6a1504 100644 --- a/search/functions_5.js +++ b/search/functions_5.js @@ -1,6 +1,6 @@ var searchData= [ - ['fail',['fail',['../classentt_1_1process.html#a81816bdd06dce4058bfe3cfa5d42a64c',1,'entt::process']]], - ['find',['find',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abc62bcf057442361bf5560d570bad011',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::find()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a65394766edeb7e6aad42fc7a387dacb8',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::find()'],['../classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01',1,'entt::sparse_set::find()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a46c8d4e4e9d4c1bd5c6a7e49116d68b3',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::find()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae70c45e7dee534232252f5611df43011',1,'entt::basic_view< Entity, exclude_t<>, Component >::find()']]], - ['func',['func',['../classentt_1_1meta__factory.html#ae40d97f4685edbf04a240eec58883b18',1,'entt::meta_factory::func()'],['../classentt_1_1meta__type.html#a51c81458a7e39dc8f54c4a331179fd85',1,'entt::meta_type::func(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a5961815feeed79779caa1f183bcec5a3',1,'entt::meta_type::func(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]] + ['fail_488',['fail',['../classentt_1_1process.html#a81816bdd06dce4058bfe3cfa5d42a64c',1,'entt::process']]], + ['find_489',['find',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abc62bcf057442361bf5560d570bad011',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::find()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a65394766edeb7e6aad42fc7a387dacb8',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::find()'],['../classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01',1,'entt::sparse_set::find()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a46c8d4e4e9d4c1bd5c6a7e49116d68b3',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::find()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae70c45e7dee534232252f5611df43011',1,'entt::basic_view< Entity, exclude_t<>, Component >::find()']]], + ['func_490',['func',['../classentt_1_1meta__factory.html#ae40d97f4685edbf04a240eec58883b18',1,'entt::meta_factory::func()'],['../classentt_1_1meta__type.html#a51c81458a7e39dc8f54c4a331179fd85',1,'entt::meta_type::func(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a5961815feeed79779caa1f183bcec5a3',1,'entt::meta_type::func(const ENTT_ID_TYPE identifier) const ENTT_NOEXCEPT']]] ]; diff --git a/search/functions_6.html b/search/functions_6.html index c50612362..f7d283d10 100644 --- a/search/functions_6.html +++ b/search/functions_6.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_6.js b/search/functions_6.js index 2ba37b1ad..750c8dacf 100644 --- a/search/functions_6.js +++ b/search/functions_6.js @@ -1,6 +1,6 @@ var searchData= [ - ['get',['get',['../structentt_1_1basic__actor.html#a64d3d7ff9801b9efbb3cf08d93baca88',1,'entt::basic_actor::get() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a194f434fa3ed013a5266ebcbaa4761d8',1,'entt::basic_actor::get() ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9f4ca1f67341a3a3e1397fb0e61ca662',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::get()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a8d76ebfec56ed423b41f7837325f1153',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::get()'],['../classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df',1,'entt::basic_registry::get([[maybe_unused]] const entity_type entity) const'],['../classentt_1_1basic__registry.html#aed5e3029a1134f1bb87617d0e99f89ac',1,'entt::basic_registry::get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ab9f40b67e8a21a0aa2071ea127a1e4b9',1,'entt::basic_storage::get(const entity_type entt) const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a629a39bfc6a29036671dea9d9b42f70d',1,'entt::basic_storage::get(const entity_type entt) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a23b589f4d08e6c18071c95b310004bd9',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::get()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7c9adf96ab08975fd9c934ed8f76a091',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::get()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0cd8a539628cc3090183094b07a44521',1,'entt::basic_view< Entity, exclude_t<>, Component >::get()'],['../structentt_1_1service__locator.html#ab72c1dab3eec4554690a82457894b385',1,'entt::service_locator::get()'],['../structentt_1_1meta__data.html#a3d63885952dd5a7613bab37fc63c8ecd',1,'entt::meta_data::get(meta_handle handle) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#a98d5a4bd199049ba9ea553ec21fac583',1,'entt::meta_data::get(meta_handle handle, std::size_t index) const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#afa206e76d351ac2c502996e08f858612',1,'entt::handle::get() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#a7c67da714dbde0cd2f2a35143ea36f3b',1,'entt::handle::get() ENTT_NOEXCEPT']]], - ['get_5for_5fassign',['get_or_assign',['../classentt_1_1basic__registry.html#a20a14f97c1684c5aaeeba13ba40a3ad7',1,'entt::basic_registry']]], - ['group',['group',['../structentt_1_1basic__collector_3_4.html#a0d5a3c7d8d96f79585930f93939136f0',1,'entt::basic_collector<>::group()'],['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#aef9fec26165b69baf8c7593fcd93327c',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >::group()'],['../classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3',1,'entt::basic_registry::group(get_t< Get... >, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a886142ed67a5a4a3a7114569c0a0f74a',1,'entt::basic_registry::group(get_t< Get... >, exclude_t< Exclude... >={}) const'],['../classentt_1_1basic__registry.html#ad8a3da35761199f663293d1b30a33bc7',1,'entt::basic_registry::group(exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a33979dba930ff03181b63866a712944c',1,'entt::basic_registry::group(exclude_t< Exclude... >={}) const']]] + ['get_491',['get',['../structentt_1_1basic__actor.html#a64d3d7ff9801b9efbb3cf08d93baca88',1,'entt::basic_actor::get() const ENTT_NOEXCEPT'],['../structentt_1_1basic__actor.html#a194f434fa3ed013a5266ebcbaa4761d8',1,'entt::basic_actor::get() ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9f4ca1f67341a3a3e1397fb0e61ca662',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::get()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a8d76ebfec56ed423b41f7837325f1153',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::get()'],['../classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df',1,'entt::basic_registry::get([[maybe_unused]] const entity_type entity) const'],['../classentt_1_1basic__registry.html#aed5e3029a1134f1bb87617d0e99f89ac',1,'entt::basic_registry::get([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ab9f40b67e8a21a0aa2071ea127a1e4b9',1,'entt::basic_storage::get(const entity_type entt) const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a629a39bfc6a29036671dea9d9b42f70d',1,'entt::basic_storage::get(const entity_type entt) ENTT_NOEXCEPT'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a23b589f4d08e6c18071c95b310004bd9',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::get()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7c9adf96ab08975fd9c934ed8f76a091',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::get()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0cd8a539628cc3090183094b07a44521',1,'entt::basic_view< Entity, exclude_t<>, Component >::get()'],['../structentt_1_1service__locator.html#ab72c1dab3eec4554690a82457894b385',1,'entt::service_locator::get()'],['../structentt_1_1meta__data.html#a3d63885952dd5a7613bab37fc63c8ecd',1,'entt::meta_data::get(meta_handle handle) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#a98d5a4bd199049ba9ea553ec21fac583',1,'entt::meta_data::get(meta_handle handle, std::size_t index) const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#afa206e76d351ac2c502996e08f858612',1,'entt::handle::get() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#a7c67da714dbde0cd2f2a35143ea36f3b',1,'entt::handle::get() ENTT_NOEXCEPT']]], + ['get_5for_5fassign_492',['get_or_assign',['../classentt_1_1basic__registry.html#a20a14f97c1684c5aaeeba13ba40a3ad7',1,'entt::basic_registry']]], + ['group_493',['group',['../structentt_1_1basic__collector_3_4.html#a0d5a3c7d8d96f79585930f93939136f0',1,'entt::basic_collector<>::group()'],['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#aef9fec26165b69baf8c7593fcd93327c',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >::group()'],['../classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3',1,'entt::basic_registry::group(get_t< Get... >, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a886142ed67a5a4a3a7114569c0a0f74a',1,'entt::basic_registry::group(get_t< Get... >, exclude_t< Exclude... >={}) const'],['../classentt_1_1basic__registry.html#ad8a3da35761199f663293d1b30a33bc7',1,'entt::basic_registry::group(exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#a33979dba930ff03181b63866a712944c',1,'entt::basic_registry::group(exclude_t< Exclude... >={}) const']]] ]; diff --git a/search/functions_7.html b/search/functions_7.html index 83a7b84b7..a74fe44aa 100644 --- a/search/functions_7.html +++ b/search/functions_7.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_7.js b/search/functions_7.js index 7f1be1048..6f43f1dd2 100644 --- a/search/functions_7.js +++ b/search/functions_7.js @@ -1,5 +1,5 @@ var searchData= [ - ['handle',['handle',['../structentt_1_1cache.html#a54969aa49fc2b1b8d4b885145d085829',1,'entt::cache::handle()'],['../classentt_1_1handle.html#ac084be205973fb5feedd3c5795955f97',1,'entt::handle::handle()']]], - ['has',['has',['../structentt_1_1basic__actor.html#a8e7a76ea53bc8a0cce33462def30b9ac',1,'entt::basic_actor::has()'],['../classentt_1_1basic__registry.html#a22f516140a0fb811552f82910d95fead',1,'entt::basic_registry::has()'],['../classentt_1_1basic__continuous__loader.html#a7c2650e8116d6d32eb859435d9a31023',1,'entt::basic_continuous_loader::has()'],['../classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b',1,'entt::sparse_set::has()']]] + ['handle_494',['handle',['../structentt_1_1cache.html#a54969aa49fc2b1b8d4b885145d085829',1,'entt::cache::handle()'],['../classentt_1_1handle.html#ac084be205973fb5feedd3c5795955f97',1,'entt::handle::handle()']]], + ['has_495',['has',['../structentt_1_1basic__actor.html#a8e7a76ea53bc8a0cce33462def30b9ac',1,'entt::basic_actor::has()'],['../classentt_1_1basic__registry.html#a22f516140a0fb811552f82910d95fead',1,'entt::basic_registry::has()'],['../classentt_1_1basic__continuous__loader.html#a7c2650e8116d6d32eb859435d9a31023',1,'entt::basic_continuous_loader::has()'],['../classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b',1,'entt::sparse_set::has()']]] ]; diff --git a/search/functions_8.html b/search/functions_8.html index b55f0e65f..75fc0bea7 100644 --- a/search/functions_8.html +++ b/search/functions_8.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_8.js b/search/functions_8.js index 5b63cb296..c2a06b244 100644 --- a/search/functions_8.js +++ b/search/functions_8.js @@ -1,20 +1,20 @@ var searchData= [ - ['identifier',['identifier',['../structentt_1_1meta__data.html#aa35ccf3601fd184f57333adbb45ad304',1,'entt::meta_data::identifier()'],['../structentt_1_1meta__func.html#a5aaf8cb2a1ad0be02d0b7f4824f92f69',1,'entt::meta_func::identifier()'],['../classentt_1_1meta__type.html#a8fef9cb62964ff4e0b39a378a33a6b41',1,'entt::meta_type::identifier()']]], - ['index',['index',['../classentt_1_1sparse__set.html#afbdea531952ca6857abdfddf7866b5a2',1,'entt::sparse_set']]], - ['instance',['instance',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3e0495b7612d458cbc59dc4b657d586f',1,'entt::delegate< Ret(Args...)>']]], - ['invoke',['invoke',['../structentt_1_1meta__ctor.html#a2402980d8233e20480e0732df86f4d11',1,'entt::meta_ctor::invoke()'],['../structentt_1_1meta__dtor.html#a0b61f83fcfee615d8a27d9ff31c3deed',1,'entt::meta_dtor::invoke()'],['../structentt_1_1meta__func.html#a6145a3e14b99154a5caec4ad66a85c88',1,'entt::meta_func::invoke()']]], - ['is_5farray',['is_array',['../classentt_1_1meta__type.html#a708c42df22be9647eca05a8c9701a7b2',1,'entt::meta_type']]], - ['is_5fclass',['is_class',['../classentt_1_1meta__type.html#a9d1e5e6cd4c097143a3055b8e56a8641',1,'entt::meta_type']]], - ['is_5fconst',['is_const',['../structentt_1_1meta__data.html#a04acd97d1fe059a1dd3daaf508e10558',1,'entt::meta_data::is_const()'],['../structentt_1_1meta__func.html#a93c1f9ba3252788f9ac470f6ad6e3fb9',1,'entt::meta_func::is_const()']]], - ['is_5fenum',['is_enum',['../classentt_1_1meta__type.html#ab2d4f56d08063128d0b4bc5cb4b1b0c9',1,'entt::meta_type']]], - ['is_5ffloating_5fpoint',['is_floating_point',['../classentt_1_1meta__type.html#acb95ab1d8952b3595b0d820cee1aa79d',1,'entt::meta_type']]], - ['is_5ffunction_5fpointer',['is_function_pointer',['../classentt_1_1meta__type.html#a5e2c3e0856d2eff7ce2403000c67c0d6',1,'entt::meta_type']]], - ['is_5fintegral',['is_integral',['../classentt_1_1meta__type.html#a222c4b6ae628f9ed6f90cd3573f788c8',1,'entt::meta_type']]], - ['is_5fmember_5ffunction_5fpointer',['is_member_function_pointer',['../classentt_1_1meta__type.html#a184083298b97b476f02509fd5379bdbb',1,'entt::meta_type']]], - ['is_5fmember_5fobject_5fpointer',['is_member_object_pointer',['../classentt_1_1meta__type.html#a486ce6d737b37675403f3e719a2a51a2',1,'entt::meta_type']]], - ['is_5fpointer',['is_pointer',['../classentt_1_1meta__type.html#a8eec2742984f892febcbc48a6192bdfd',1,'entt::meta_type']]], - ['is_5fstatic',['is_static',['../structentt_1_1meta__data.html#a94ae645e41c37e0da30a0353d391b9ad',1,'entt::meta_data::is_static()'],['../structentt_1_1meta__func.html#a8faf171039dc72ea51d94acc2c2ea249',1,'entt::meta_func::is_static()']]], - ['is_5funion',['is_union',['../classentt_1_1meta__type.html#ad3503617450b2814e53362206bb6fecd',1,'entt::meta_type']]], - ['is_5fvoid',['is_void',['../classentt_1_1meta__type.html#a4a8aea6060bd82daf287bb6c63c1955a',1,'entt::meta_type']]] + ['identifier_496',['identifier',['../structentt_1_1meta__data.html#aa35ccf3601fd184f57333adbb45ad304',1,'entt::meta_data::identifier()'],['../structentt_1_1meta__func.html#a5aaf8cb2a1ad0be02d0b7f4824f92f69',1,'entt::meta_func::identifier()'],['../classentt_1_1meta__type.html#a8fef9cb62964ff4e0b39a378a33a6b41',1,'entt::meta_type::identifier()']]], + ['index_497',['index',['../classentt_1_1sparse__set.html#afbdea531952ca6857abdfddf7866b5a2',1,'entt::sparse_set']]], + ['instance_498',['instance',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3e0495b7612d458cbc59dc4b657d586f',1,'entt::delegate< Ret(Args...)>']]], + ['invoke_499',['invoke',['../structentt_1_1meta__ctor.html#a2402980d8233e20480e0732df86f4d11',1,'entt::meta_ctor::invoke()'],['../structentt_1_1meta__dtor.html#a0b61f83fcfee615d8a27d9ff31c3deed',1,'entt::meta_dtor::invoke()'],['../structentt_1_1meta__func.html#a6145a3e14b99154a5caec4ad66a85c88',1,'entt::meta_func::invoke()']]], + ['is_5farray_500',['is_array',['../classentt_1_1meta__type.html#a708c42df22be9647eca05a8c9701a7b2',1,'entt::meta_type']]], + ['is_5fclass_501',['is_class',['../classentt_1_1meta__type.html#a9d1e5e6cd4c097143a3055b8e56a8641',1,'entt::meta_type']]], + ['is_5fconst_502',['is_const',['../structentt_1_1meta__data.html#a04acd97d1fe059a1dd3daaf508e10558',1,'entt::meta_data::is_const()'],['../structentt_1_1meta__func.html#a93c1f9ba3252788f9ac470f6ad6e3fb9',1,'entt::meta_func::is_const()']]], + ['is_5fenum_503',['is_enum',['../classentt_1_1meta__type.html#ab2d4f56d08063128d0b4bc5cb4b1b0c9',1,'entt::meta_type']]], + ['is_5ffloating_5fpoint_504',['is_floating_point',['../classentt_1_1meta__type.html#acb95ab1d8952b3595b0d820cee1aa79d',1,'entt::meta_type']]], + ['is_5ffunction_5fpointer_505',['is_function_pointer',['../classentt_1_1meta__type.html#a5e2c3e0856d2eff7ce2403000c67c0d6',1,'entt::meta_type']]], + ['is_5fintegral_506',['is_integral',['../classentt_1_1meta__type.html#a222c4b6ae628f9ed6f90cd3573f788c8',1,'entt::meta_type']]], + ['is_5fmember_5ffunction_5fpointer_507',['is_member_function_pointer',['../classentt_1_1meta__type.html#a184083298b97b476f02509fd5379bdbb',1,'entt::meta_type']]], + ['is_5fmember_5fobject_5fpointer_508',['is_member_object_pointer',['../classentt_1_1meta__type.html#a486ce6d737b37675403f3e719a2a51a2',1,'entt::meta_type']]], + ['is_5fpointer_509',['is_pointer',['../classentt_1_1meta__type.html#a8eec2742984f892febcbc48a6192bdfd',1,'entt::meta_type']]], + ['is_5fstatic_510',['is_static',['../structentt_1_1meta__data.html#a94ae645e41c37e0da30a0353d391b9ad',1,'entt::meta_data::is_static()'],['../structentt_1_1meta__func.html#a8faf171039dc72ea51d94acc2c2ea249',1,'entt::meta_func::is_static()']]], + ['is_5funion_511',['is_union',['../classentt_1_1meta__type.html#ad3503617450b2814e53362206bb6fecd',1,'entt::meta_type']]], + ['is_5fvoid_512',['is_void',['../classentt_1_1meta__type.html#a4a8aea6060bd82daf287bb6c63c1955a',1,'entt::meta_type']]] ]; diff --git a/search/functions_9.html b/search/functions_9.html index c73f07bb5..7541c9e3e 100644 --- a/search/functions_9.html +++ b/search/functions_9.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_9.js b/search/functions_9.js index b5e707769..504f78dfe 100644 --- a/search/functions_9.js +++ b/search/functions_9.js @@ -1,4 +1,4 @@ var searchData= [ - ['key',['key',['../structentt_1_1meta__prop.html#a3f46ec94ffc028eb41c8db9915e7b6f3',1,'entt::meta_prop']]] + ['key_513',['key',['../structentt_1_1meta__prop.html#a3f46ec94ffc028eb41c8db9915e7b6f3',1,'entt::meta_prop']]] ]; diff --git a/search/functions_a.html b/search/functions_a.html index f10ad638c..5a5be6300 100644 --- a/search/functions_a.html +++ b/search/functions_a.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_a.js b/search/functions_a.js index 5148f0bfc..dfef7d7a5 100644 --- a/search/functions_a.js +++ b/search/functions_a.js @@ -1,6 +1,6 @@ var searchData= [ - ['less',['less',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a2728847f1d565d445bb5c1a995f5115e',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::less()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acc243830b7c8020cfa6a1a75814f3656',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::less()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#abe2ed0e4135be7b60038a5e7aa7a7f9b',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::less(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a99f59a63a7e28ec28a509e88e1a0a5f6',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::less(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a84b4522b3905af57fc30063f706553a8',1,'entt::basic_view< Entity, exclude_t<>, Component >::less()']]], - ['load',['load',['../structentt_1_1cache.html#ac84620fa85a03fc9ddef39e3995d3021',1,'entt::cache']]], - ['loader',['loader',['../classentt_1_1basic__registry.html#a3d1400403d03bc6e3e5fd9dfe60c5dd3',1,'entt::basic_registry']]] + ['less_514',['less',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a2728847f1d565d445bb5c1a995f5115e',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::less()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acc243830b7c8020cfa6a1a75814f3656',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::less()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#abe2ed0e4135be7b60038a5e7aa7a7f9b',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::less(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a99f59a63a7e28ec28a509e88e1a0a5f6',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::less(Func func) const'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a84b4522b3905af57fc30063f706553a8',1,'entt::basic_view< Entity, exclude_t<>, Component >::less()']]], + ['load_515',['load',['../structentt_1_1cache.html#ac84620fa85a03fc9ddef39e3995d3021',1,'entt::cache']]], + ['loader_516',['loader',['../classentt_1_1basic__registry.html#a3d1400403d03bc6e3e5fd9dfe60c5dd3',1,'entt::basic_registry']]] ]; diff --git a/search/functions_b.html b/search/functions_b.html index 172ea1b31..fc2d5aa4e 100644 --- a/search/functions_b.html +++ b/search/functions_b.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_b.js b/search/functions_b.js index e59e6351f..3da4ea16b 100644 --- a/search/functions_b.js +++ b/search/functions_b.js @@ -1,15 +1,15 @@ var searchData= [ - ['map',['map',['../classentt_1_1basic__continuous__loader.html#ab077b1e21a817130db7401524ffc41a0',1,'entt::basic_continuous_loader']]], - ['meta',['meta',['../namespaceentt.html#ab79e77dca50a2a5d78ce51db8a0a68e5',1,'entt']]], - ['meta_5fany',['meta_any',['../classentt_1_1meta__any.html#a7d9eaa43621da68af96080b7f345f2b6',1,'entt::meta_any::meta_any() ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a7d53cd9aca308797d0ddbb3d02fdaf35',1,'entt::meta_any::meta_any(std::in_place_type_t< Type >, [[maybe_unused]] Args &&... args)'],['../classentt_1_1meta__any.html#ab79ba4f90b6a9764ff65330bc71562b5',1,'entt::meta_any::meta_any(std::reference_wrapper< Type > type)'],['../classentt_1_1meta__any.html#a4a95b9d9b79763d9a53822135e930f81',1,'entt::meta_any::meta_any(meta_handle handle) ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#adb57245c636a920913ec11088473c064',1,'entt::meta_any::meta_any(Type &&type)'],['../classentt_1_1meta__any.html#a8070ecc97c91d3c294d07339073e0a6a',1,'entt::meta_any::meta_any(const meta_any &other)'],['../classentt_1_1meta__any.html#a16de68c4d78064eb025627588936edfb',1,'entt::meta_any::meta_any(meta_any &&other) ENTT_NOEXCEPT']]], - ['meta_5fbase',['meta_base',['../structentt_1_1meta__base.html#a7138b13e8dc1d75ad4e47ef89780eda4',1,'entt::meta_base']]], - ['meta_5fconv',['meta_conv',['../structentt_1_1meta__conv.html#a143077e70c5bdd5b45d9e4b2d3bf47bd',1,'entt::meta_conv']]], - ['meta_5fctor',['meta_ctor',['../structentt_1_1meta__ctor.html#a2bead30533fe42d44d184cf852b3b3c0',1,'entt::meta_ctor']]], - ['meta_5fdata',['meta_data',['../structentt_1_1meta__data.html#a4fe5508ec458bdab269c129345269ff2',1,'entt::meta_data']]], - ['meta_5fdtor',['meta_dtor',['../structentt_1_1meta__dtor.html#ab50c68d1bcb838404513bc08381ef3c5',1,'entt::meta_dtor']]], - ['meta_5ffunc',['meta_func',['../structentt_1_1meta__func.html#a08cf20d2ec99cca580d1121aeed7064c',1,'entt::meta_func']]], - ['meta_5fhandle',['meta_handle',['../classentt_1_1meta__handle.html#a45c9c3f6a23bcf62a0fc306296236236',1,'entt::meta_handle::meta_handle() ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a4550f4a5eadcd9e2779b1fc65e9cebf3',1,'entt::meta_handle::meta_handle(meta_any &any) ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#aa60f562026da01256ca9411d78d941f5',1,'entt::meta_handle::meta_handle(Type &obj) ENTT_NOEXCEPT']]], - ['meta_5fprop',['meta_prop',['../structentt_1_1meta__prop.html#aa668d575de720943ad376a273f27c14e',1,'entt::meta_prop']]], - ['meta_5ftype',['meta_type',['../classentt_1_1meta__type.html#a40488260af3ad41dd35c8c4267e849f8',1,'entt::meta_type']]] + ['map_517',['map',['../classentt_1_1basic__continuous__loader.html#ab077b1e21a817130db7401524ffc41a0',1,'entt::basic_continuous_loader']]], + ['meta_518',['meta',['../namespaceentt.html#ab79e77dca50a2a5d78ce51db8a0a68e5',1,'entt']]], + ['meta_5fany_519',['meta_any',['../classentt_1_1meta__any.html#a7d9eaa43621da68af96080b7f345f2b6',1,'entt::meta_any::meta_any() ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#a7d53cd9aca308797d0ddbb3d02fdaf35',1,'entt::meta_any::meta_any(std::in_place_type_t< Type >, [[maybe_unused]] Args &&... args)'],['../classentt_1_1meta__any.html#ab79ba4f90b6a9764ff65330bc71562b5',1,'entt::meta_any::meta_any(std::reference_wrapper< Type > type)'],['../classentt_1_1meta__any.html#a4a95b9d9b79763d9a53822135e930f81',1,'entt::meta_any::meta_any(meta_handle handle) ENTT_NOEXCEPT'],['../classentt_1_1meta__any.html#adb57245c636a920913ec11088473c064',1,'entt::meta_any::meta_any(Type &&type)'],['../classentt_1_1meta__any.html#a8070ecc97c91d3c294d07339073e0a6a',1,'entt::meta_any::meta_any(const meta_any &other)'],['../classentt_1_1meta__any.html#a16de68c4d78064eb025627588936edfb',1,'entt::meta_any::meta_any(meta_any &&other) ENTT_NOEXCEPT']]], + ['meta_5fbase_520',['meta_base',['../structentt_1_1meta__base.html#a7138b13e8dc1d75ad4e47ef89780eda4',1,'entt::meta_base']]], + ['meta_5fconv_521',['meta_conv',['../structentt_1_1meta__conv.html#a143077e70c5bdd5b45d9e4b2d3bf47bd',1,'entt::meta_conv']]], + ['meta_5fctor_522',['meta_ctor',['../structentt_1_1meta__ctor.html#a2bead30533fe42d44d184cf852b3b3c0',1,'entt::meta_ctor']]], + ['meta_5fdata_523',['meta_data',['../structentt_1_1meta__data.html#a4fe5508ec458bdab269c129345269ff2',1,'entt::meta_data']]], + ['meta_5fdtor_524',['meta_dtor',['../structentt_1_1meta__dtor.html#ab50c68d1bcb838404513bc08381ef3c5',1,'entt::meta_dtor']]], + ['meta_5ffunc_525',['meta_func',['../structentt_1_1meta__func.html#a08cf20d2ec99cca580d1121aeed7064c',1,'entt::meta_func']]], + ['meta_5fhandle_526',['meta_handle',['../classentt_1_1meta__handle.html#a45c9c3f6a23bcf62a0fc306296236236',1,'entt::meta_handle::meta_handle() ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#a4550f4a5eadcd9e2779b1fc65e9cebf3',1,'entt::meta_handle::meta_handle(meta_any &any) ENTT_NOEXCEPT'],['../classentt_1_1meta__handle.html#aa60f562026da01256ca9411d78d941f5',1,'entt::meta_handle::meta_handle(Type &obj) ENTT_NOEXCEPT']]], + ['meta_5fprop_527',['meta_prop',['../structentt_1_1meta__prop.html#aa668d575de720943ad376a273f27c14e',1,'entt::meta_prop']]], + ['meta_5ftype_528',['meta_type',['../classentt_1_1meta__type.html#a40488260af3ad41dd35c8c4267e849f8',1,'entt::meta_type']]] ]; diff --git a/search/functions_c.html b/search/functions_c.html index 99492ba8e..a1a143781 100644 --- a/search/functions_c.html +++ b/search/functions_c.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_c.js b/search/functions_c.js index 58b0dbd31..610ada8f9 100644 --- a/search/functions_c.js +++ b/search/functions_c.js @@ -1,27 +1,27 @@ var searchData= [ - ['basic_5fgroup_3c_20entity_2c_20exclude_2c_20get_2c_20owned_2e_2e_2e_20_3e',['basic_group< Entity, Exclude, Get, Owned... >',['../structentt_1_1as__group.html#a5bc540042a69aee98c28c8446152a47f',1,'entt::as_group']]], - ['basic_5fview_3c_20entity_2c_20exclude_2c_20component_2e_2e_2e_20_3e',['basic_view< Entity, Exclude, Component... >',['../structentt_1_1as__view.html#aac140def0e18cd8dc04c486f6d5813da',1,'entt::as_view']]], - ['on',['on',['../classentt_1_1emitter.html#a0b580005200bb810a4a3e94320efcd8a',1,'entt::emitter']]], - ['on_5fconstruct',['on_construct',['../classentt_1_1basic__registry.html#a3784cae09a1a72a861c4ccd1e76db86a',1,'entt::basic_registry']]], - ['on_5fdestroy',['on_destroy',['../classentt_1_1basic__registry.html#a2a4af2fe256e5609282686b427f0ebcf',1,'entt::basic_registry']]], - ['on_5freplace',['on_replace',['../classentt_1_1basic__registry.html#a23857b92dfe141d7fd60c450fd14507a',1,'entt::basic_registry']]], - ['once',['once',['../classentt_1_1emitter.html#a79834d452b0600ebe0e70c54f4a21fd6',1,'entt::emitter']]], - ['operator_20bool',['operator bool',['../structentt_1_1basic__actor.html#ac53927bb871e3b54a74ebc8e90fd9ade',1,'entt::basic_actor::operator bool()'],['../classentt_1_1meta__any.html#ad1cbe0447f1b0df45706712566f1b2a0',1,'entt::meta_any::operator bool()'],['../classentt_1_1meta__handle.html#a759d3375fd8e5811ca898cb8d6740eda',1,'entt::meta_handle::operator bool()'],['../structentt_1_1meta__prop.html#adb6af4bef4db742083886a0b97646407',1,'entt::meta_prop::operator bool()'],['../structentt_1_1meta__base.html#ad19d5a997c91281da3674a6b17d011bd',1,'entt::meta_base::operator bool()'],['../structentt_1_1meta__conv.html#aa7b17a68e2b9f7a1b614a5aa1e4a7c1a',1,'entt::meta_conv::operator bool()'],['../structentt_1_1meta__ctor.html#ac34d2ccb2c3ff0549775ed5c4c617ba2',1,'entt::meta_ctor::operator bool()'],['../structentt_1_1meta__dtor.html#ad4b53dd0805dd47276c196b093258deb',1,'entt::meta_dtor::operator bool()'],['../structentt_1_1meta__data.html#aebff3cb9edf609deb8577ed29225c508',1,'entt::meta_data::operator bool()'],['../structentt_1_1meta__func.html#a436c57daae914c9222de41c7b7678584',1,'entt::meta_func::operator bool()'],['../classentt_1_1meta__type.html#ae8101e23b4b79a4452f063736f86b3ad',1,'entt::meta_type::operator bool()'],['../classentt_1_1handle.html#a2c4264107321541019eeab88f4bac335',1,'entt::handle::operator bool()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a73e1029cbb6359d803a6cc06b82f80d7',1,'entt::delegate< Ret(Args...)>::operator bool()'],['../classentt_1_1connection.html#a6763393665228bcf52ad41a21105d468',1,'entt::connection::operator bool()']]], - ['operator_20const_20resource_20_26',['operator const Resource &',['../classentt_1_1handle.html#a5a6fe485f3d1af803a941f5dba9e444f',1,'entt::handle']]], - ['operator_20const_20value_5ftype_20_2a',['operator const value_type *',['../classentt_1_1basic__hashed__string.html#ad0cc0b27f0dd52a07e25f5014ba426fc',1,'entt::basic_hashed_string']]], - ['operator_20hash_5ftype',['operator hash_type',['../classentt_1_1basic__hashed__string.html#aa2009a1ac648d8bdaeac642a6476f2bd',1,'entt::basic_hashed_string']]], - ['operator_20resource_20_26',['operator Resource &',['../classentt_1_1handle.html#a38ed3e151650b67f26339b380db76c2a',1,'entt::handle']]], - ['operator_20type',['operator Type',['../structentt_1_1monostate.html#aac27bfe6d1feb94cc601cc38077f923a',1,'entt::monostate']]], - ['operator_21_3d',['operator!=',['../namespaceentt.html#a1a211752d12273a08015c524133e27c3',1,'entt::operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a3e7582fde7d0323ad068543d660116f4',1,'entt::operator!=(const meta_any &lhs, const meta_any &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#abe07bfd01b0fac902d6d89a76b8b58fe',1,'entt::operator!=(const meta_prop &lhs, const meta_prop &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a633d6546a24a66cfba27ad3f8bdbbd30',1,'entt::operator!=(const meta_base &lhs, const meta_base &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#ae0028b0d2edc4d7fd110069323d80f4b',1,'entt::operator!=(const meta_conv &lhs, const meta_conv &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a42e03a0e2b4f0ed2bf7dd7635e4d22e8',1,'entt::operator!=(const meta_ctor &lhs, const meta_ctor &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#ab4ba1bf1f3ad09a47b477ad9a320393f',1,'entt::operator!=(const meta_dtor &lhs, const meta_dtor &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#afffe04587aa936ef68791af1d99d380d',1,'entt::operator!=(const meta_data &lhs, const meta_data &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a0bccfeb5e95c4ce5ea82cac0b4738f49',1,'entt::operator!=(const meta_func &lhs, const meta_func &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a2feb1b10f84534d2ed32aed30c36cb61',1,'entt::operator!=(const meta_type &lhs, const meta_type &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a656b2ec80abf493ce1924b314d13fd18',1,'entt::operator!=(const delegate< Ret(Args...)> &lhs, const delegate< Ret(Args...)> &rhs) ENTT_NOEXCEPT']]], - ['operator_28_29',['operator()',['../structentt_1_1std__sort.html#af25b38ddb03e206a71a1f47521eaea46',1,'entt::std_sort::operator()()'],['../structentt_1_1insertion__sort.html#a73a5644fe5b683f9b9376c89ac47f2b8',1,'entt::insertion_sort::operator()()'],['../structentt_1_1radix__sort.html#a1989f6fbe18d3d82fdea9745d6b9ee96',1,'entt::radix_sort::operator()()'],['../structentt_1_1identity.html#a4663a97f57bf16459d1ca94b74965b5e',1,'entt::identity::operator()()'],['../structentt_1_1y__combinator.html#aaf600432620d702c835ff5555f962c40',1,'entt::y_combinator::operator()(Args &&... args) const'],['../structentt_1_1y__combinator.html#ab87fd1de40da60ffef1d0ed9b76280a8',1,'entt::y_combinator::operator()(Args &&... args)'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a0e53caedb53810bc96aa71bce199c990',1,'entt::delegate< Ret(Args...)>::operator()()']]], - ['operator_2a',['operator*',['../classentt_1_1handle.html#a20a3b1865543ce4ad19262470c72d4e5',1,'entt::handle::operator*() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#a0b1aa9bace6bdef7e5788f48abaad3da',1,'entt::handle::operator*() ENTT_NOEXCEPT']]], - ['operator_2d_3e',['operator->',['../classentt_1_1handle.html#a73df220e891ca8418f5f5fd476997e13',1,'entt::handle::operator->() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#ad7f9d864894ae2c8835c9b95d95db841',1,'entt::handle::operator->() ENTT_NOEXCEPT']]], - ['operator_3d',['operator=',['../structentt_1_1monostate.html#a2b2751ad1d49cbf5068fde7e0e8640ac',1,'entt::monostate::operator=()'],['../structentt_1_1basic__actor.html#a729116e0ae65677a6ed9ed9d21c111c6',1,'entt::basic_actor::operator=()'],['../classentt_1_1basic__observer.html#a03dcb6b0999d29bc39410d7ae6d9ac53',1,'entt::basic_observer::operator=(const basic_observer &)=delete'],['../classentt_1_1basic__observer.html#a8b7cd199f236a4dee02f202ec0fd6281',1,'entt::basic_observer::operator=(basic_observer &&)=delete'],['../classentt_1_1basic__registry.html#a70f7acd3a0e9a8dc4ef7e85172f93a59',1,'entt::basic_registry::operator=()'],['../classentt_1_1basic__snapshot.html#a1484b609195cfd057bbdd8808d4392bc',1,'entt::basic_snapshot::operator=()'],['../classentt_1_1basic__snapshot__loader.html#aa55eeaad2ab4dd117524afff9d6e184b',1,'entt::basic_snapshot_loader::operator=()'],['../classentt_1_1basic__continuous__loader.html#afd396d84cb27e070a6a812bd28140c75',1,'entt::basic_continuous_loader::operator=()'],['../classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34',1,'entt::sparse_set::operator=(const sparse_set &other)'],['../classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa',1,'entt::sparse_set::operator=(sparse_set &&)=default'],['../classentt_1_1meta__any.html#acfb1ce537c6072aabb53662658213e04',1,'entt::meta_any::operator=(Type &&type)'],['../classentt_1_1meta__any.html#a97360c78351767409f9db58c9f785ad5',1,'entt::meta_any::operator=(const meta_any &other)'],['../classentt_1_1meta__any.html#a8fbda3a54404e9cf4787b5b212cf1185',1,'entt::meta_any::operator=(meta_any &&other) ENTT_NOEXCEPT'],['../classentt_1_1scheduler.html#aea6ab78dbf00ba17c6e828ee0505afd9',1,'entt::scheduler::operator=()'],['../structentt_1_1cache.html#a1f4136cd86ea31278c4eaad59112e8ff',1,'entt::cache::operator=()'],['../classentt_1_1emitter.html#ab270d2c6d986621a781467e29e64629c',1,'entt::emitter::operator=()'],['../classentt_1_1connection.html#a19e6c45b11cfcd0fef1e4c086f63e891',1,'entt::connection::operator=(const connection &)=default'],['../classentt_1_1connection.html#ad7dfbcc07f74bff317efcdf6988135fa',1,'entt::connection::operator=(connection &&other)'],['../structentt_1_1scoped__connection.html#ae079c45e0eb97f31ec1d5a4be76163fc',1,'entt::scoped_connection::operator=(const scoped_connection &)=delete'],['../structentt_1_1scoped__connection.html#a4cf8b6b0683310c58af3344077fd8e97',1,'entt::scoped_connection::operator=(scoped_connection &&)=default'],['../structentt_1_1scoped__connection.html#a51d7df995ac1dee40add9f80a351fdf5',1,'entt::scoped_connection::operator=(const connection &other)'],['../structentt_1_1scoped__connection.html#ab2b9858209560ac77b4cbed95ecd116d',1,'entt::scoped_connection::operator=(connection &&other)']]], - ['operator_3d_3d',['operator==',['../classentt_1_1basic__hashed__string.html#a51311d6903443296ce076536df2b46da',1,'entt::basic_hashed_string::operator==()'],['../classentt_1_1meta__any.html#a2673fdc066e710ce94cbb2f5c3994d42',1,'entt::meta_any::operator==()'],['../structentt_1_1meta__prop.html#adbcf1179374bab74c2be1f395078b89e',1,'entt::meta_prop::operator==()'],['../structentt_1_1meta__base.html#a6469955ac7550d5396cf185795c07a15',1,'entt::meta_base::operator==()'],['../structentt_1_1meta__conv.html#a176af5a8c4b2fae4dc1d862509705152',1,'entt::meta_conv::operator==()'],['../structentt_1_1meta__ctor.html#a49299869b3adc7a3a97dc9c9cf9617a8',1,'entt::meta_ctor::operator==()'],['../structentt_1_1meta__dtor.html#a55905a8daf9dafcdc33e38e1247b1e9d',1,'entt::meta_dtor::operator==()'],['../structentt_1_1meta__data.html#ac44372da54f317b93fec85570bb50cfc',1,'entt::meta_data::operator==()'],['../structentt_1_1meta__func.html#a4d29a2982e937d0dff5dac93434099a1',1,'entt::meta_func::operator==()'],['../classentt_1_1meta__type.html#a838362aa3598bfa4cc18041d3445bace',1,'entt::meta_type::operator==()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a54ca30c9a3f7a9662363c48db4e86aae',1,'entt::delegate< Ret(Args...)>::operator==()']]], - ['operator_5b_5d',['operator[]',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ad90a0721069352d895191a6c49240e38',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::operator[]()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ad3f79a1e2f300011eeb9b3420e56fccc',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::operator[]()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a9e4d4f3d6235b755765e1935d96f307e',1,'entt::basic_view< Entity, exclude_t<>, Component >::operator[]()']]], - ['orphan',['orphan',['../classentt_1_1basic__registry.html#a10f5e61d4cabab9e9c1e87edc30de551',1,'entt::basic_registry']]], - ['orphans',['orphans',['../classentt_1_1basic__registry.html#ae337ceb77e75c10c73ffa671e09bfff8',1,'entt::basic_registry::orphans()'],['../classentt_1_1basic__snapshot__loader.html#acd881016761f5eb598763fbf3595a625',1,'entt::basic_snapshot_loader::orphans()'],['../classentt_1_1basic__continuous__loader.html#ac8b328bb8c6c4acde51ab5b943f0ea86',1,'entt::basic_continuous_loader::orphans()']]], - ['overload',['overload',['../namespaceentt.html#ae289e7f5640bb43223901039346e5ce0',1,'entt::overload(Type Class::*member) ENTT_NOEXCEPT'],['../namespaceentt.html#a33de87747dbfdef2a916f290d4f66836',1,'entt::overload(Type *func) ENTT_NOEXCEPT']]], - ['overloaded',['overloaded',['../namespaceentt.html#a4f3131bbda45993bd35a9d07db09e777',1,'entt']]] + ['basic_5fgroup_3c_20entity_2c_20exclude_2c_20get_2c_20owned_2e_2e_2e_20_3e_529',['basic_group< Entity, Exclude, Get, Owned... >',['../structentt_1_1as__group.html#a5bc540042a69aee98c28c8446152a47f',1,'entt::as_group']]], + ['basic_5fview_3c_20entity_2c_20exclude_2c_20component_2e_2e_2e_20_3e_530',['basic_view< Entity, Exclude, Component... >',['../structentt_1_1as__view.html#aac140def0e18cd8dc04c486f6d5813da',1,'entt::as_view']]], + ['on_531',['on',['../classentt_1_1emitter.html#a0b580005200bb810a4a3e94320efcd8a',1,'entt::emitter']]], + ['on_5fconstruct_532',['on_construct',['../classentt_1_1basic__registry.html#a3784cae09a1a72a861c4ccd1e76db86a',1,'entt::basic_registry']]], + ['on_5fdestroy_533',['on_destroy',['../classentt_1_1basic__registry.html#a2a4af2fe256e5609282686b427f0ebcf',1,'entt::basic_registry']]], + ['on_5freplace_534',['on_replace',['../classentt_1_1basic__registry.html#a23857b92dfe141d7fd60c450fd14507a',1,'entt::basic_registry']]], + ['once_535',['once',['../classentt_1_1emitter.html#a79834d452b0600ebe0e70c54f4a21fd6',1,'entt::emitter']]], + ['operator_20bool_536',['operator bool',['../structentt_1_1basic__actor.html#ac53927bb871e3b54a74ebc8e90fd9ade',1,'entt::basic_actor::operator bool()'],['../classentt_1_1meta__any.html#ad1cbe0447f1b0df45706712566f1b2a0',1,'entt::meta_any::operator bool()'],['../classentt_1_1meta__handle.html#a759d3375fd8e5811ca898cb8d6740eda',1,'entt::meta_handle::operator bool()'],['../structentt_1_1meta__prop.html#adb6af4bef4db742083886a0b97646407',1,'entt::meta_prop::operator bool()'],['../structentt_1_1meta__base.html#ad19d5a997c91281da3674a6b17d011bd',1,'entt::meta_base::operator bool()'],['../structentt_1_1meta__conv.html#aa7b17a68e2b9f7a1b614a5aa1e4a7c1a',1,'entt::meta_conv::operator bool()'],['../structentt_1_1meta__ctor.html#ac34d2ccb2c3ff0549775ed5c4c617ba2',1,'entt::meta_ctor::operator bool()'],['../structentt_1_1meta__dtor.html#ad4b53dd0805dd47276c196b093258deb',1,'entt::meta_dtor::operator bool()'],['../structentt_1_1meta__data.html#aebff3cb9edf609deb8577ed29225c508',1,'entt::meta_data::operator bool()'],['../structentt_1_1meta__func.html#a436c57daae914c9222de41c7b7678584',1,'entt::meta_func::operator bool()'],['../classentt_1_1meta__type.html#ae8101e23b4b79a4452f063736f86b3ad',1,'entt::meta_type::operator bool()'],['../classentt_1_1handle.html#a2c4264107321541019eeab88f4bac335',1,'entt::handle::operator bool()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a73e1029cbb6359d803a6cc06b82f80d7',1,'entt::delegate< Ret(Args...)>::operator bool()'],['../classentt_1_1connection.html#a6763393665228bcf52ad41a21105d468',1,'entt::connection::operator bool()']]], + ['operator_20const_20resource_20_26_537',['operator const Resource &',['../classentt_1_1handle.html#a5a6fe485f3d1af803a941f5dba9e444f',1,'entt::handle']]], + ['operator_20const_20value_5ftype_20_2a_538',['operator const value_type *',['../classentt_1_1basic__hashed__string.html#ad0cc0b27f0dd52a07e25f5014ba426fc',1,'entt::basic_hashed_string']]], + ['operator_20hash_5ftype_539',['operator hash_type',['../classentt_1_1basic__hashed__string.html#aa2009a1ac648d8bdaeac642a6476f2bd',1,'entt::basic_hashed_string']]], + ['operator_20resource_20_26_540',['operator Resource &',['../classentt_1_1handle.html#a38ed3e151650b67f26339b380db76c2a',1,'entt::handle']]], + ['operator_20type_541',['operator Type',['../structentt_1_1monostate.html#aac27bfe6d1feb94cc601cc38077f923a',1,'entt::monostate']]], + ['operator_21_3d_542',['operator!=',['../namespaceentt.html#a1a211752d12273a08015c524133e27c3',1,'entt::operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a3e7582fde7d0323ad068543d660116f4',1,'entt::operator!=(const meta_any &lhs, const meta_any &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#abe07bfd01b0fac902d6d89a76b8b58fe',1,'entt::operator!=(const meta_prop &lhs, const meta_prop &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a633d6546a24a66cfba27ad3f8bdbbd30',1,'entt::operator!=(const meta_base &lhs, const meta_base &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#ae0028b0d2edc4d7fd110069323d80f4b',1,'entt::operator!=(const meta_conv &lhs, const meta_conv &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a42e03a0e2b4f0ed2bf7dd7635e4d22e8',1,'entt::operator!=(const meta_ctor &lhs, const meta_ctor &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#ab4ba1bf1f3ad09a47b477ad9a320393f',1,'entt::operator!=(const meta_dtor &lhs, const meta_dtor &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#afffe04587aa936ef68791af1d99d380d',1,'entt::operator!=(const meta_data &lhs, const meta_data &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a0bccfeb5e95c4ce5ea82cac0b4738f49',1,'entt::operator!=(const meta_func &lhs, const meta_func &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a2feb1b10f84534d2ed32aed30c36cb61',1,'entt::operator!=(const meta_type &lhs, const meta_type &rhs) ENTT_NOEXCEPT'],['../namespaceentt.html#a656b2ec80abf493ce1924b314d13fd18',1,'entt::operator!=(const delegate< Ret(Args...)> &lhs, const delegate< Ret(Args...)> &rhs) ENTT_NOEXCEPT']]], + ['operator_28_29_543',['operator()',['../structentt_1_1std__sort.html#af25b38ddb03e206a71a1f47521eaea46',1,'entt::std_sort::operator()()'],['../structentt_1_1insertion__sort.html#a73a5644fe5b683f9b9376c89ac47f2b8',1,'entt::insertion_sort::operator()()'],['../structentt_1_1radix__sort.html#a1989f6fbe18d3d82fdea9745d6b9ee96',1,'entt::radix_sort::operator()()'],['../structentt_1_1identity.html#a4663a97f57bf16459d1ca94b74965b5e',1,'entt::identity::operator()()'],['../structentt_1_1y__combinator.html#aaf600432620d702c835ff5555f962c40',1,'entt::y_combinator::operator()(Args &&... args) const'],['../structentt_1_1y__combinator.html#ab87fd1de40da60ffef1d0ed9b76280a8',1,'entt::y_combinator::operator()(Args &&... args)'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a0e53caedb53810bc96aa71bce199c990',1,'entt::delegate< Ret(Args...)>::operator()()']]], + ['operator_2a_544',['operator*',['../classentt_1_1handle.html#a20a3b1865543ce4ad19262470c72d4e5',1,'entt::handle::operator*() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#a0b1aa9bace6bdef7e5788f48abaad3da',1,'entt::handle::operator*() ENTT_NOEXCEPT']]], + ['operator_2d_3e_545',['operator->',['../classentt_1_1handle.html#a73df220e891ca8418f5f5fd476997e13',1,'entt::handle::operator->() const ENTT_NOEXCEPT'],['../classentt_1_1handle.html#ad7f9d864894ae2c8835c9b95d95db841',1,'entt::handle::operator->() ENTT_NOEXCEPT']]], + ['operator_3d_546',['operator=',['../structentt_1_1monostate.html#a2b2751ad1d49cbf5068fde7e0e8640ac',1,'entt::monostate::operator=()'],['../structentt_1_1basic__actor.html#a729116e0ae65677a6ed9ed9d21c111c6',1,'entt::basic_actor::operator=()'],['../classentt_1_1basic__observer.html#a03dcb6b0999d29bc39410d7ae6d9ac53',1,'entt::basic_observer::operator=(const basic_observer &)=delete'],['../classentt_1_1basic__observer.html#a8b7cd199f236a4dee02f202ec0fd6281',1,'entt::basic_observer::operator=(basic_observer &&)=delete'],['../classentt_1_1basic__registry.html#a70f7acd3a0e9a8dc4ef7e85172f93a59',1,'entt::basic_registry::operator=()'],['../classentt_1_1basic__snapshot.html#a1484b609195cfd057bbdd8808d4392bc',1,'entt::basic_snapshot::operator=()'],['../classentt_1_1basic__snapshot__loader.html#aa55eeaad2ab4dd117524afff9d6e184b',1,'entt::basic_snapshot_loader::operator=()'],['../classentt_1_1basic__continuous__loader.html#afd396d84cb27e070a6a812bd28140c75',1,'entt::basic_continuous_loader::operator=()'],['../classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34',1,'entt::sparse_set::operator=(const sparse_set &other)'],['../classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa',1,'entt::sparse_set::operator=(sparse_set &&)=default'],['../classentt_1_1meta__any.html#acfb1ce537c6072aabb53662658213e04',1,'entt::meta_any::operator=(Type &&type)'],['../classentt_1_1meta__any.html#a97360c78351767409f9db58c9f785ad5',1,'entt::meta_any::operator=(const meta_any &other)'],['../classentt_1_1meta__any.html#a8fbda3a54404e9cf4787b5b212cf1185',1,'entt::meta_any::operator=(meta_any &&other) ENTT_NOEXCEPT'],['../classentt_1_1scheduler.html#aea6ab78dbf00ba17c6e828ee0505afd9',1,'entt::scheduler::operator=()'],['../structentt_1_1cache.html#a1f4136cd86ea31278c4eaad59112e8ff',1,'entt::cache::operator=()'],['../classentt_1_1emitter.html#ab270d2c6d986621a781467e29e64629c',1,'entt::emitter::operator=()'],['../classentt_1_1connection.html#a19e6c45b11cfcd0fef1e4c086f63e891',1,'entt::connection::operator=(const connection &)=default'],['../classentt_1_1connection.html#ad7dfbcc07f74bff317efcdf6988135fa',1,'entt::connection::operator=(connection &&other)'],['../structentt_1_1scoped__connection.html#ae079c45e0eb97f31ec1d5a4be76163fc',1,'entt::scoped_connection::operator=(const scoped_connection &)=delete'],['../structentt_1_1scoped__connection.html#a4cf8b6b0683310c58af3344077fd8e97',1,'entt::scoped_connection::operator=(scoped_connection &&)=default'],['../structentt_1_1scoped__connection.html#a51d7df995ac1dee40add9f80a351fdf5',1,'entt::scoped_connection::operator=(const connection &other)'],['../structentt_1_1scoped__connection.html#ab2b9858209560ac77b4cbed95ecd116d',1,'entt::scoped_connection::operator=(connection &&other)']]], + ['operator_3d_3d_547',['operator==',['../classentt_1_1basic__hashed__string.html#a51311d6903443296ce076536df2b46da',1,'entt::basic_hashed_string::operator==()'],['../classentt_1_1meta__any.html#a2673fdc066e710ce94cbb2f5c3994d42',1,'entt::meta_any::operator==()'],['../structentt_1_1meta__prop.html#adbcf1179374bab74c2be1f395078b89e',1,'entt::meta_prop::operator==()'],['../structentt_1_1meta__base.html#a6469955ac7550d5396cf185795c07a15',1,'entt::meta_base::operator==()'],['../structentt_1_1meta__conv.html#a176af5a8c4b2fae4dc1d862509705152',1,'entt::meta_conv::operator==()'],['../structentt_1_1meta__ctor.html#a49299869b3adc7a3a97dc9c9cf9617a8',1,'entt::meta_ctor::operator==()'],['../structentt_1_1meta__dtor.html#a55905a8daf9dafcdc33e38e1247b1e9d',1,'entt::meta_dtor::operator==()'],['../structentt_1_1meta__data.html#ac44372da54f317b93fec85570bb50cfc',1,'entt::meta_data::operator==()'],['../structentt_1_1meta__func.html#a4d29a2982e937d0dff5dac93434099a1',1,'entt::meta_func::operator==()'],['../classentt_1_1meta__type.html#a838362aa3598bfa4cc18041d3445bace',1,'entt::meta_type::operator==()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a54ca30c9a3f7a9662363c48db4e86aae',1,'entt::delegate< Ret(Args...)>::operator==()']]], + ['operator_5b_5d_548',['operator[]',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ad90a0721069352d895191a6c49240e38',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::operator[]()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ad3f79a1e2f300011eeb9b3420e56fccc',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::operator[]()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a9e4d4f3d6235b755765e1935d96f307e',1,'entt::basic_view< Entity, exclude_t<>, Component >::operator[]()']]], + ['orphan_549',['orphan',['../classentt_1_1basic__registry.html#a10f5e61d4cabab9e9c1e87edc30de551',1,'entt::basic_registry']]], + ['orphans_550',['orphans',['../classentt_1_1basic__registry.html#ae337ceb77e75c10c73ffa671e09bfff8',1,'entt::basic_registry::orphans()'],['../classentt_1_1basic__snapshot__loader.html#acd881016761f5eb598763fbf3595a625',1,'entt::basic_snapshot_loader::orphans()'],['../classentt_1_1basic__continuous__loader.html#ac8b328bb8c6c4acde51ab5b943f0ea86',1,'entt::basic_continuous_loader::orphans()']]], + ['overload_551',['overload',['../namespaceentt.html#ae289e7f5640bb43223901039346e5ce0',1,'entt::overload(Type Class::*member) ENTT_NOEXCEPT'],['../namespaceentt.html#a33de87747dbfdef2a916f290d4f66836',1,'entt::overload(Type *func) ENTT_NOEXCEPT']]], + ['overloaded_552',['overloaded',['../namespaceentt.html#a4f3131bbda45993bd35a9d07db09e777',1,'entt']]] ]; diff --git a/search/functions_d.html b/search/functions_d.html index 5be9eccb7..4375535f3 100644 --- a/search/functions_d.html +++ b/search/functions_d.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_d.js b/search/functions_d.js index 9a0bb9105..c391de0e1 100644 --- a/search/functions_d.js +++ b/search/functions_d.js @@ -1,11 +1,11 @@ var searchData= [ - ['parent',['parent',['../structentt_1_1meta__base.html#ad05e984d2cc36f64c0a64fe951e9cdce',1,'entt::meta_base::parent()'],['../structentt_1_1meta__conv.html#a6ca68ad1f28b7e410133f2fa902e2fd5',1,'entt::meta_conv::parent()'],['../structentt_1_1meta__ctor.html#a776c2812dd8724523fc881defb1116f2',1,'entt::meta_ctor::parent()'],['../structentt_1_1meta__dtor.html#ad5cf3129b534f5cb6f736a713f71e37e',1,'entt::meta_dtor::parent()'],['../structentt_1_1meta__data.html#af951f9f860512984d19c706ca3013fed',1,'entt::meta_data::parent()'],['../structentt_1_1meta__func.html#a63056a4d3f0a16c988d90162240fe74d',1,'entt::meta_func::parent()']]], - ['pause',['pause',['../classentt_1_1process.html#a9bf45a6c430f5e32fc7ab33a7a197abc',1,'entt::process']]], - ['paused',['paused',['../classentt_1_1process.html#a2c1c1f5ea78d3b2fc87cfcdbf7a1b40f',1,'entt::process']]], - ['prepare',['prepare',['../classentt_1_1basic__registry.html#aad398e6279c6bbee2068b94c74bf83d6',1,'entt::basic_registry']]], - ['process_5fadaptor',['process_adaptor',['../structentt_1_1process__adaptor.html#ad1e2c8f3c44bf42abb05ef913b8267ce',1,'entt::process_adaptor']]], - ['prop',['prop',['../classentt_1_1extended__meta__factory.html#a67b4797a58215f0bff993a708be56c3d',1,'entt::extended_meta_factory::prop()'],['../structentt_1_1meta__ctor.html#ae63dd6567cc8ec0eb871ce253f49f6a7',1,'entt::meta_ctor::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__ctor.html#ab852dea70110981bc9cff4df1a6831ee',1,'entt::meta_ctor::prop(meta_any key) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#abffe3a3870ba6d7f05c953b7cea50a68',1,'entt::meta_data::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#a99b411ff9aba822bc52ebb8b5a43702a',1,'entt::meta_data::prop(meta_any key) const ENTT_NOEXCEPT'],['../structentt_1_1meta__func.html#a28d919188b186ad646b56e0fd1485fc6',1,'entt::meta_func::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__func.html#a58b6facbf66b9f4d9c23598e298de2b1',1,'entt::meta_func::prop(meta_any key) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a9da6947b4a4df64e23f81b3488fa7dff',1,'entt::meta_type::prop(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a5f7fa14c9999c3ede65278b41b543f12',1,'entt::meta_type::prop(meta_any key) const ENTT_NOEXCEPT']]], - ['props',['props',['../classentt_1_1extended__meta__factory.html#ad96aa7f041b17895a66b36e338d1451e',1,'entt::extended_meta_factory']]], - ['publish',['publish',['../classentt_1_1emitter.html#a4ece275ff8736bcdcfb4103087801ea2',1,'entt::emitter::publish()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a062abaa0969c6762616466b67bee5d7d',1,'entt::sigh< Ret(Args...)>::publish()']]] + ['parent_553',['parent',['../structentt_1_1meta__base.html#ad05e984d2cc36f64c0a64fe951e9cdce',1,'entt::meta_base::parent()'],['../structentt_1_1meta__conv.html#a6ca68ad1f28b7e410133f2fa902e2fd5',1,'entt::meta_conv::parent()'],['../structentt_1_1meta__ctor.html#a776c2812dd8724523fc881defb1116f2',1,'entt::meta_ctor::parent()'],['../structentt_1_1meta__dtor.html#ad5cf3129b534f5cb6f736a713f71e37e',1,'entt::meta_dtor::parent()'],['../structentt_1_1meta__data.html#af951f9f860512984d19c706ca3013fed',1,'entt::meta_data::parent()'],['../structentt_1_1meta__func.html#a63056a4d3f0a16c988d90162240fe74d',1,'entt::meta_func::parent()']]], + ['pause_554',['pause',['../classentt_1_1process.html#a9bf45a6c430f5e32fc7ab33a7a197abc',1,'entt::process']]], + ['paused_555',['paused',['../classentt_1_1process.html#a2c1c1f5ea78d3b2fc87cfcdbf7a1b40f',1,'entt::process']]], + ['prepare_556',['prepare',['../classentt_1_1basic__registry.html#aad398e6279c6bbee2068b94c74bf83d6',1,'entt::basic_registry']]], + ['process_5fadaptor_557',['process_adaptor',['../structentt_1_1process__adaptor.html#ad1e2c8f3c44bf42abb05ef913b8267ce',1,'entt::process_adaptor']]], + ['prop_558',['prop',['../classentt_1_1extended__meta__factory.html#a67b4797a58215f0bff993a708be56c3d',1,'entt::extended_meta_factory::prop()'],['../structentt_1_1meta__ctor.html#ae63dd6567cc8ec0eb871ce253f49f6a7',1,'entt::meta_ctor::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__ctor.html#ab852dea70110981bc9cff4df1a6831ee',1,'entt::meta_ctor::prop(meta_any key) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#abffe3a3870ba6d7f05c953b7cea50a68',1,'entt::meta_data::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__data.html#a99b411ff9aba822bc52ebb8b5a43702a',1,'entt::meta_data::prop(meta_any key) const ENTT_NOEXCEPT'],['../structentt_1_1meta__func.html#a28d919188b186ad646b56e0fd1485fc6',1,'entt::meta_func::prop(Op op) const ENTT_NOEXCEPT'],['../structentt_1_1meta__func.html#a58b6facbf66b9f4d9c23598e298de2b1',1,'entt::meta_func::prop(meta_any key) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a9da6947b4a4df64e23f81b3488fa7dff',1,'entt::meta_type::prop(Op op) const ENTT_NOEXCEPT'],['../classentt_1_1meta__type.html#a5f7fa14c9999c3ede65278b41b543f12',1,'entt::meta_type::prop(meta_any key) const ENTT_NOEXCEPT']]], + ['props_559',['props',['../classentt_1_1extended__meta__factory.html#ad96aa7f041b17895a66b36e338d1451e',1,'entt::extended_meta_factory']]], + ['publish_560',['publish',['../classentt_1_1emitter.html#a4ece275ff8736bcdcfb4103087801ea2',1,'entt::emitter::publish()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a062abaa0969c6762616466b67bee5d7d',1,'entt::sigh< Ret(Args...)>::publish()']]] ]; diff --git a/search/functions_e.html b/search/functions_e.html index e256cb630..0f2054469 100644 --- a/search/functions_e.html +++ b/search/functions_e.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_e.js b/search/functions_e.js index afdfad5d0..6bd069019 100644 --- a/search/functions_e.js +++ b/search/functions_e.js @@ -1,18 +1,18 @@ var searchData= [ - ['raw',['raw',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a5be80cb2fc104116469c1fa65b992149',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::raw()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a945850dca5e5d13ae5be53eaf863ac38',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::raw()'],['../classentt_1_1basic__registry.html#aa0aa5dd120230aecd3b41474acbaecd2',1,'entt::basic_registry::raw() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a79751d793fe0f28e8f0e163e46638cb9',1,'entt::basic_registry::raw() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a8e38d136d24bb38ef96c02135549c5d8',1,'entt::basic_storage::raw() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ae7757471c65eca305d2b83b570571065',1,'entt::basic_storage::raw() ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a3642beed007b678deb694d92e4a8743d',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::raw()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#af0bd1c0efb41c883001d6fd21c975c0f',1,'entt::basic_view< Entity, exclude_t<>, Component >::raw()']]], - ['ref',['ref',['../structentt_1_1service__locator.html#ae24d16726620af40371fadeddf5b5e2e',1,'entt::service_locator']]], - ['rejected',['rejected',['../classentt_1_1process.html#a6ac63863bf823806d813b046769b4419',1,'entt::process']]], - ['release',['release',['../classentt_1_1connection.html#ae564477ab623301169916c1992c970a8',1,'entt::connection']]], - ['reload',['reload',['../structentt_1_1cache.html#a138c981b9e2d139c40adc4c662f3ab26',1,'entt::cache']]], - ['remove',['remove',['../structentt_1_1basic__actor.html#ab740844d18ada7ad15988f808617a1a1',1,'entt::basic_actor::remove()'],['../classentt_1_1basic__registry.html#a44f5eac6fa4d1999a121f55e67a36c24',1,'entt::basic_registry::remove()']]], - ['remove_5fextent',['remove_extent',['../classentt_1_1meta__type.html#a1cee84bcd77ef63480c84dba5c959f2b',1,'entt::meta_type']]], - ['remove_5fpointer',['remove_pointer',['../classentt_1_1meta__type.html#a89df1ddbee0b5aef2651f1fc712ada20',1,'entt::meta_type']]], - ['replace',['replace',['../structentt_1_1basic__collector_3_4.html#a634ac3a53ee686d7fb7121404b14c17e',1,'entt::basic_collector<>::replace()'],['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#a29c88a0f4e74f7e93d7ae7d08326a5b5',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >::replace()'],['../classentt_1_1basic__registry.html#a0411735fcddcc942613463c5401dd661',1,'entt::basic_registry::replace()']]], - ['reserve',['reserve',['../classentt_1_1basic__registry.html#a632adf32f7b23f1dae8bf4f8800a0bbe',1,'entt::basic_registry::reserve()'],['../classentt_1_1sparse__set.html#a8b4b9dd989877bc333fdc455fcd068d7',1,'entt::sparse_set::reserve()'],['../classentt_1_1basic__storage.html#a8f2a2a968a241832acc338b8dca2f744',1,'entt::basic_storage::reserve()']]], - ['reset',['reset',['../classentt_1_1basic__registry.html#a95dd0483f9839dfbce8af5ed120b94c2',1,'entt::basic_registry::reset(const entity_type entity)'],['../classentt_1_1basic__registry.html#ac5b546f2508b2a10a6f1d8c77db12837',1,'entt::basic_registry::reset()'],['../classentt_1_1basic__registry.html#a38a7c3696f749d0e873374086c3c0f88',1,'entt::basic_registry::reset()'],['../classentt_1_1sparse__set.html#abcf1b927ccc18fba0fef178d168c1fa7',1,'entt::sparse_set::reset()'],['../classentt_1_1basic__storage.html#a1ed587372f7bcf15ab0d17397c2dad81',1,'entt::basic_storage::reset()'],['../structentt_1_1service__locator.html#a4d655acab54d87058ad41a266830d0e8',1,'entt::service_locator::reset()'],['../classentt_1_1meta__factory.html#a795ae5cd4fd7772256442e598421649f',1,'entt::meta_factory::reset()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a0d81bb1bde6abd78914cd0a07084bcd7',1,'entt::delegate< Ret(Args...)>::reset()']]], - ['resolve',['resolve',['../namespaceentt.html#a2129cb8668f5dcbc11854be6a4a0b6e5',1,'entt::resolve() ENTT_NOEXCEPT'],['../namespaceentt.html#afd2ff81413fa0bda15d1c0b69497cf62',1,'entt::resolve(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../namespaceentt.html#af04a0a841795917ea4d906981bee83b7',1,'entt::resolve(Op op) ENTT_NOEXCEPT']]], - ['respect',['respect',['../classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6',1,'entt::sparse_set']]], - ['ret',['ret',['../structentt_1_1meta__func.html#a6a1bfe7f9b2e8c833dbfb5dff75bf1e9',1,'entt::meta_func']]], - ['runtime_5fview',['runtime_view',['../classentt_1_1basic__registry.html#af1f17548d9527797e366f610e9de36f6',1,'entt::basic_registry']]] + ['raw_561',['raw',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a5be80cb2fc104116469c1fa65b992149',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::raw()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a945850dca5e5d13ae5be53eaf863ac38',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::raw()'],['../classentt_1_1basic__registry.html#aa0aa5dd120230aecd3b41474acbaecd2',1,'entt::basic_registry::raw() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#a79751d793fe0f28e8f0e163e46638cb9',1,'entt::basic_registry::raw() ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#a8e38d136d24bb38ef96c02135549c5d8',1,'entt::basic_storage::raw() const ENTT_NOEXCEPT'],['../classentt_1_1basic__storage.html#ae7757471c65eca305d2b83b570571065',1,'entt::basic_storage::raw() ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a3642beed007b678deb694d92e4a8743d',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::raw()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#af0bd1c0efb41c883001d6fd21c975c0f',1,'entt::basic_view< Entity, exclude_t<>, Component >::raw()']]], + ['ref_562',['ref',['../structentt_1_1service__locator.html#ae24d16726620af40371fadeddf5b5e2e',1,'entt::service_locator']]], + ['rejected_563',['rejected',['../classentt_1_1process.html#a6ac63863bf823806d813b046769b4419',1,'entt::process']]], + ['release_564',['release',['../classentt_1_1connection.html#ae564477ab623301169916c1992c970a8',1,'entt::connection']]], + ['reload_565',['reload',['../structentt_1_1cache.html#a138c981b9e2d139c40adc4c662f3ab26',1,'entt::cache']]], + ['remove_566',['remove',['../structentt_1_1basic__actor.html#ab740844d18ada7ad15988f808617a1a1',1,'entt::basic_actor::remove()'],['../classentt_1_1basic__registry.html#a44f5eac6fa4d1999a121f55e67a36c24',1,'entt::basic_registry::remove()']]], + ['remove_5fextent_567',['remove_extent',['../classentt_1_1meta__type.html#a1cee84bcd77ef63480c84dba5c959f2b',1,'entt::meta_type']]], + ['remove_5fpointer_568',['remove_pointer',['../classentt_1_1meta__type.html#a89df1ddbee0b5aef2651f1fc712ada20',1,'entt::meta_type']]], + ['replace_569',['replace',['../structentt_1_1basic__collector_3_4.html#a634ac3a53ee686d7fb7121404b14c17e',1,'entt::basic_collector<>::replace()'],['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#a29c88a0f4e74f7e93d7ae7d08326a5b5',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >::replace()'],['../classentt_1_1basic__registry.html#a0411735fcddcc942613463c5401dd661',1,'entt::basic_registry::replace()']]], + ['reserve_570',['reserve',['../classentt_1_1basic__registry.html#a632adf32f7b23f1dae8bf4f8800a0bbe',1,'entt::basic_registry::reserve()'],['../classentt_1_1sparse__set.html#a8b4b9dd989877bc333fdc455fcd068d7',1,'entt::sparse_set::reserve()'],['../classentt_1_1basic__storage.html#a8f2a2a968a241832acc338b8dca2f744',1,'entt::basic_storage::reserve()']]], + ['reset_571',['reset',['../classentt_1_1basic__registry.html#a95dd0483f9839dfbce8af5ed120b94c2',1,'entt::basic_registry::reset(const entity_type entity)'],['../classentt_1_1basic__registry.html#ac5b546f2508b2a10a6f1d8c77db12837',1,'entt::basic_registry::reset()'],['../classentt_1_1basic__registry.html#a38a7c3696f749d0e873374086c3c0f88',1,'entt::basic_registry::reset()'],['../classentt_1_1sparse__set.html#abcf1b927ccc18fba0fef178d168c1fa7',1,'entt::sparse_set::reset()'],['../classentt_1_1basic__storage.html#a1ed587372f7bcf15ab0d17397c2dad81',1,'entt::basic_storage::reset()'],['../structentt_1_1service__locator.html#a4d655acab54d87058ad41a266830d0e8',1,'entt::service_locator::reset()'],['../classentt_1_1meta__factory.html#a795ae5cd4fd7772256442e598421649f',1,'entt::meta_factory::reset()'],['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a0d81bb1bde6abd78914cd0a07084bcd7',1,'entt::delegate< Ret(Args...)>::reset()']]], + ['resolve_572',['resolve',['../namespaceentt.html#a2129cb8668f5dcbc11854be6a4a0b6e5',1,'entt::resolve() ENTT_NOEXCEPT'],['../namespaceentt.html#afd2ff81413fa0bda15d1c0b69497cf62',1,'entt::resolve(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT'],['../namespaceentt.html#af04a0a841795917ea4d906981bee83b7',1,'entt::resolve(Op op) ENTT_NOEXCEPT']]], + ['respect_573',['respect',['../classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6',1,'entt::sparse_set']]], + ['ret_574',['ret',['../structentt_1_1meta__func.html#a6a1bfe7f9b2e8c833dbfb5dff75bf1e9',1,'entt::meta_func']]], + ['runtime_5fview_575',['runtime_view',['../classentt_1_1basic__registry.html#af1f17548d9527797e366f610e9de36f6',1,'entt::basic_registry']]] ]; diff --git a/search/functions_f.html b/search/functions_f.html index 424126cd7..0dc9f86c7 100644 --- a/search/functions_f.html +++ b/search/functions_f.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/functions_f.js b/search/functions_f.js index a38b2bad0..fe4256bfb 100644 --- a/search/functions_f.js +++ b/search/functions_f.js @@ -1,18 +1,18 @@ var searchData= [ - ['scheduler',['scheduler',['../classentt_1_1scheduler.html#a7b06b3a881b89c9d3b9829ccf111fae4',1,'entt::scheduler::scheduler() ENTT_NOEXCEPT=default'],['../classentt_1_1scheduler.html#af582ffea72368a83ea4dd7d9e563f715',1,'entt::scheduler::scheduler(scheduler &&)=default']]], - ['scoped_5fconnection',['scoped_connection',['../structentt_1_1scoped__connection.html#a5675cd808dd54a6d9546037d282d3c6c',1,'entt::scoped_connection::scoped_connection()=default'],['../structentt_1_1scoped__connection.html#af9a6be81350091a9ee1c5418b7ca12ed',1,'entt::scoped_connection::scoped_connection(const connection &conn)'],['../structentt_1_1scoped__connection.html#ad52da49cdabbfe1a4aada361f48fb9be',1,'entt::scoped_connection::scoped_connection(const scoped_connection &)=delete'],['../structentt_1_1scoped__connection.html#abb53075d1cc80d885e961a47ca5dd064',1,'entt::scoped_connection::scoped_connection(scoped_connection &&)=default']]], - ['service_5flocator',['service_locator',['../structentt_1_1service__locator.html#a120cdb3eb1d820e5649f3d8bac8098d0',1,'entt::service_locator']]], - ['set',['set',['../classentt_1_1basic__registry.html#a7d771eee6e8e573bf1b8e4e8501ea7f1',1,'entt::basic_registry::set()'],['../structentt_1_1service__locator.html#a116dc62f5d2a1c65db9d7528c957e91f',1,'entt::service_locator::set(Args &&... args)'],['../structentt_1_1service__locator.html#a86770e79d01ab5fb0dddffba0bf9a697',1,'entt::service_locator::set(std::shared_ptr< Service > ptr)'],['../structentt_1_1meta__data.html#a776f1d239c00cc96c683bbbd348119da',1,'entt::meta_data::set(meta_handle handle, Type &&value) const'],['../structentt_1_1meta__data.html#ae0a9924efdaedd5bec4ed37efa5e0671',1,'entt::meta_data::set(meta_handle handle, std::size_t index, Type &&value) const']]], - ['shrink',['shrink',['../classentt_1_1basic__continuous__loader.html#a01b949f4a5829bd5bf3738a7e0f776d2',1,'entt::basic_continuous_loader']]], - ['shrink_5fto_5ffit',['shrink_to_fit',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6cc71def601dfb3a1c224b74a5c91da5',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::shrink_to_fit()'],['../classentt_1_1basic__registry.html#a63aa387e557553d61483a58807cd785e',1,'entt::basic_registry::shrink_to_fit()'],['../classentt_1_1sparse__set.html#a75f5d70148a149e4cbc485c7a7b00dda',1,'entt::sparse_set::shrink_to_fit()'],['../classentt_1_1basic__storage.html#a208fc8c4400c12e41229345badd0bc99',1,'entt::basic_storage::shrink_to_fit()']]], - ['sink',['sink',['../classentt_1_1dispatcher.html#afedd59083875621a11510b00c84c8878',1,'entt::dispatcher::sink()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a04540177a67694d12e9316ac0aef4e45',1,'entt::sink< Ret(Args...)>::sink()'],['../namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d',1,'entt::sink()']]], - ['size',['size',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a18fb71cb9621491caf569cf20c99fe3c',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ac8aabc32d123bfa0bc10db289aafff7a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ab1600321e1a656bb9cda64e7254821ac',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acf74917323f67e0b81b1253cc42308e9',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#ab42aeb1e1ffb32b98bc4da4f30755ec1',1,'entt::basic_observer::size()'],['../classentt_1_1basic__registry.html#abb5713726f7b5c4b67a0271a64bedd2f',1,'entt::basic_registry::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#afdfc12e1ffa6bac72c2de9af7e91f44e',1,'entt::basic_registry::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__runtime__view.html#a8a14205c30a77fae500ff244a8f9041e',1,'entt::basic_runtime_view::size()'],['../classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190',1,'entt::sparse_set::size()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#adfa9d55a6bebf3d6133048160f223506',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1006310c8f34441de27724157e78e220',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8648cc860a64d9adcfc261679b8a174e',1,'entt::basic_view< Entity, exclude_t<>, Component >::size()'],['../structentt_1_1meta__ctor.html#ad0ac4a64b630462768a3f12f6389b6e7',1,'entt::meta_ctor::size()'],['../structentt_1_1meta__func.html#ae4bc5f5e90003362872d8cd056b2f689',1,'entt::meta_func::size()'],['../classentt_1_1scheduler.html#ab0c473e6d4733bdb78f3dc26147de4ad',1,'entt::scheduler::size()'],['../structentt_1_1cache.html#afe769393054badd0f5839667a485b19d',1,'entt::cache::size()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#ab2f3ba2ab5c20816342f5dc43987ba93',1,'entt::sigh< Ret(Args...)>::size()']]], - ['snapshot',['snapshot',['../classentt_1_1basic__registry.html#ad6ab9182dd41bc02ddfc0c3c8195a215',1,'entt::basic_registry']]], - ['sort',['sort',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a75f3809337978fb02cb31b3155f00dbd',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::sort(Compare compare, Sort algo=Sort{}, Args &&... args)'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9970a9683d86e9cc664e01144803d598',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::sort() const'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a86ae2163fd9b2999ff2faba740a9af05',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::sort()'],['../classentt_1_1basic__registry.html#a38ac2a883e3d881c6ae5a05a0252b7ae',1,'entt::basic_registry::sort(Compare compare, Sort algo=Sort{}, Args &&... args)'],['../classentt_1_1basic__registry.html#a2907f89b80fb692b16727e5e67a91c5d',1,'entt::basic_registry::sort()'],['../classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828',1,'entt::sparse_set::sort()'],['../classentt_1_1basic__storage.html#ac9b5e700778b280a69bb13faff484756',1,'entt::basic_storage::sort()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ab5cf50d6f5a80810185ec39c4782f583',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::sort()']]], - ['sortable',['sortable',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a0ecc1d294fd7fcfc47c38110beb3b5b3',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::sortable()'],['../classentt_1_1basic__registry.html#aeda3c0666945065d160ed58905b07888',1,'entt::basic_registry::sortable()']]], - ['sparse_5fset',['sparse_set',['../classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8',1,'entt::sparse_set::sparse_set()=default'],['../classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f',1,'entt::sparse_set::sparse_set(const sparse_set &other)'],['../classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf',1,'entt::sparse_set::sparse_set(sparse_set &&)=default']]], - ['stomp',['stomp',['../classentt_1_1basic__registry.html#a99434b531cbdf6e04be282c92d8d47b0',1,'entt::basic_registry::stomp(const entity_type dst, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#ae4518841df584574580f178dc0f3db39',1,'entt::basic_registry::stomp(It first, It last, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})']]], - ['succeed',['succeed',['../classentt_1_1process.html#a43d63ba9304654f0209fc32d2c74f4ce',1,'entt::process']]], - ['swap',['swap',['../classentt_1_1sparse__set.html#a5ef14da059528647a5d72f2e2ce0d762',1,'entt::sparse_set::swap()'],['../classentt_1_1basic__storage.html#a35f98e0151152bbf10fd1666f4bcf00b',1,'entt::basic_storage::swap()']]] + ['scheduler_576',['scheduler',['../classentt_1_1scheduler.html#a7b06b3a881b89c9d3b9829ccf111fae4',1,'entt::scheduler::scheduler() ENTT_NOEXCEPT=default'],['../classentt_1_1scheduler.html#af582ffea72368a83ea4dd7d9e563f715',1,'entt::scheduler::scheduler(scheduler &&)=default']]], + ['scoped_5fconnection_577',['scoped_connection',['../structentt_1_1scoped__connection.html#a5675cd808dd54a6d9546037d282d3c6c',1,'entt::scoped_connection::scoped_connection()=default'],['../structentt_1_1scoped__connection.html#af9a6be81350091a9ee1c5418b7ca12ed',1,'entt::scoped_connection::scoped_connection(const connection &conn)'],['../structentt_1_1scoped__connection.html#ad52da49cdabbfe1a4aada361f48fb9be',1,'entt::scoped_connection::scoped_connection(const scoped_connection &)=delete'],['../structentt_1_1scoped__connection.html#abb53075d1cc80d885e961a47ca5dd064',1,'entt::scoped_connection::scoped_connection(scoped_connection &&)=default']]], + ['service_5flocator_578',['service_locator',['../structentt_1_1service__locator.html#a120cdb3eb1d820e5649f3d8bac8098d0',1,'entt::service_locator']]], + ['set_579',['set',['../classentt_1_1basic__registry.html#a7d771eee6e8e573bf1b8e4e8501ea7f1',1,'entt::basic_registry::set()'],['../structentt_1_1service__locator.html#a116dc62f5d2a1c65db9d7528c957e91f',1,'entt::service_locator::set(Args &&... args)'],['../structentt_1_1service__locator.html#a86770e79d01ab5fb0dddffba0bf9a697',1,'entt::service_locator::set(std::shared_ptr< Service > ptr)'],['../structentt_1_1meta__data.html#a776f1d239c00cc96c683bbbd348119da',1,'entt::meta_data::set(meta_handle handle, Type &&value) const'],['../structentt_1_1meta__data.html#ae0a9924efdaedd5bec4ed37efa5e0671',1,'entt::meta_data::set(meta_handle handle, std::size_t index, Type &&value) const']]], + ['shrink_580',['shrink',['../classentt_1_1basic__continuous__loader.html#a01b949f4a5829bd5bf3738a7e0f776d2',1,'entt::basic_continuous_loader']]], + ['shrink_5fto_5ffit_581',['shrink_to_fit',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6cc71def601dfb3a1c224b74a5c91da5',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::shrink_to_fit()'],['../classentt_1_1basic__registry.html#a63aa387e557553d61483a58807cd785e',1,'entt::basic_registry::shrink_to_fit()'],['../classentt_1_1sparse__set.html#a75f5d70148a149e4cbc485c7a7b00dda',1,'entt::sparse_set::shrink_to_fit()'],['../classentt_1_1basic__storage.html#a208fc8c4400c12e41229345badd0bc99',1,'entt::basic_storage::shrink_to_fit()']]], + ['sink_582',['sink',['../classentt_1_1dispatcher.html#afedd59083875621a11510b00c84c8878',1,'entt::dispatcher::sink()'],['../classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html#a04540177a67694d12e9316ac0aef4e45',1,'entt::sink< Ret(Args...)>::sink()'],['../namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d',1,'entt::sink()']]], + ['size_583',['size',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a18fb71cb9621491caf569cf20c99fe3c',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ac8aabc32d123bfa0bc10db289aafff7a',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ab1600321e1a656bb9cda64e7254821ac',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acf74917323f67e0b81b1253cc42308e9',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__observer.html#ab42aeb1e1ffb32b98bc4da4f30755ec1',1,'entt::basic_observer::size()'],['../classentt_1_1basic__registry.html#abb5713726f7b5c4b67a0271a64bedd2f',1,'entt::basic_registry::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__registry.html#afdfc12e1ffa6bac72c2de9af7e91f44e',1,'entt::basic_registry::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__runtime__view.html#a8a14205c30a77fae500ff244a8f9041e',1,'entt::basic_runtime_view::size()'],['../classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190',1,'entt::sparse_set::size()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#adfa9d55a6bebf3d6133048160f223506',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1006310c8f34441de27724157e78e220',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size() const ENTT_NOEXCEPT'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8648cc860a64d9adcfc261679b8a174e',1,'entt::basic_view< Entity, exclude_t<>, Component >::size()'],['../structentt_1_1meta__ctor.html#ad0ac4a64b630462768a3f12f6389b6e7',1,'entt::meta_ctor::size()'],['../structentt_1_1meta__func.html#ae4bc5f5e90003362872d8cd056b2f689',1,'entt::meta_func::size()'],['../classentt_1_1scheduler.html#ab0c473e6d4733bdb78f3dc26147de4ad',1,'entt::scheduler::size()'],['../structentt_1_1cache.html#afe769393054badd0f5839667a485b19d',1,'entt::cache::size()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#ab2f3ba2ab5c20816342f5dc43987ba93',1,'entt::sigh< Ret(Args...)>::size()']]], + ['snapshot_584',['snapshot',['../classentt_1_1basic__registry.html#ad6ab9182dd41bc02ddfc0c3c8195a215',1,'entt::basic_registry']]], + ['sort_585',['sort',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a75f3809337978fb02cb31b3155f00dbd',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::sort(Compare compare, Sort algo=Sort{}, Args &&... args)'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9970a9683d86e9cc664e01144803d598',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::sort() const'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a86ae2163fd9b2999ff2faba740a9af05',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::sort()'],['../classentt_1_1basic__registry.html#a38ac2a883e3d881c6ae5a05a0252b7ae',1,'entt::basic_registry::sort(Compare compare, Sort algo=Sort{}, Args &&... args)'],['../classentt_1_1basic__registry.html#a2907f89b80fb692b16727e5e67a91c5d',1,'entt::basic_registry::sort()'],['../classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828',1,'entt::sparse_set::sort()'],['../classentt_1_1basic__storage.html#ac9b5e700778b280a69bb13faff484756',1,'entt::basic_storage::sort()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ab5cf50d6f5a80810185ec39c4782f583',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::sort()']]], + ['sortable_586',['sortable',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a0ecc1d294fd7fcfc47c38110beb3b5b3',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::sortable()'],['../classentt_1_1basic__registry.html#aeda3c0666945065d160ed58905b07888',1,'entt::basic_registry::sortable()']]], + ['sparse_5fset_587',['sparse_set',['../classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8',1,'entt::sparse_set::sparse_set()=default'],['../classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f',1,'entt::sparse_set::sparse_set(const sparse_set &other)'],['../classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf',1,'entt::sparse_set::sparse_set(sparse_set &&)=default']]], + ['stomp_588',['stomp',['../classentt_1_1basic__registry.html#a99434b531cbdf6e04be282c92d8d47b0',1,'entt::basic_registry::stomp(const entity_type dst, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})'],['../classentt_1_1basic__registry.html#ae4518841df584574580f178dc0f3db39',1,'entt::basic_registry::stomp(It first, It last, const entity_type src, const basic_registry &other, exclude_t< Exclude... >={})']]], + ['succeed_589',['succeed',['../classentt_1_1process.html#a43d63ba9304654f0209fc32d2c74f4ce',1,'entt::process']]], + ['swap_590',['swap',['../classentt_1_1sparse__set.html#a5ef14da059528647a5d72f2e2ce0d762',1,'entt::sparse_set::swap()'],['../classentt_1_1basic__storage.html#a35f98e0151152bbf10fd1666f4bcf00b',1,'entt::basic_storage::swap()']]] ]; diff --git a/search/mag_sel.png b/search/mag_sel.png index 81f6040a2..39c0ed52a 100644 Binary files a/search/mag_sel.png and b/search/mag_sel.png differ diff --git a/search/namespaces_0.html b/search/namespaces_0.html index 605ac452c..93c99f9db 100644 --- a/search/namespaces_0.html +++ b/search/namespaces_0.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/namespaces_0.js b/search/namespaces_0.js index 32fbaf041..df40c6ecf 100644 --- a/search/namespaces_0.js +++ b/search/namespaces_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['entt',['entt',['../namespaceentt.html',1,'']]] + ['entt_425',['entt',['../namespaceentt.html',1,'']]] ]; diff --git a/search/nomatches.html b/search/nomatches.html index b1ded27e9..437732089 100644 --- a/search/nomatches.html +++ b/search/nomatches.html @@ -1,4 +1,4 @@ - + diff --git a/search/pages_0.html b/search/pages_0.html index 4955b9e4f..32cbf4980 100644 --- a/search/pages_0.html +++ b/search/pages_0.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/pages_0.js b/search/pages_0.js index 850327bcb..6c84a90d2 100644 --- a/search/pages_0.js +++ b/search/pages_0.js @@ -1,10 +1,10 @@ var searchData= [ - ['crash_20course_3a_20core_20functionalities',['Crash Course: core functionalities',['../autotoc_md0.html',1,'']]], - ['crash_20course_3a_20service_20locator',['Crash Course: service locator',['../autotoc_md68.html',1,'']]], - ['crash_20course_3a_20runtime_20reflection_20system',['Crash Course: runtime reflection system',['../autotoc_md71.html',1,'']]], - ['crash_20course_3a_20entity_2dcomponent_20system',['Crash Course: entity-component system',['../autotoc_md8.html',1,'']]], - ['crash_20course_3a_20cooperative_20scheduler',['Crash Course: cooperative scheduler',['../autotoc_md81.html',1,'']]], - ['crash_20course_3a_20resource_20management',['Crash Course: resource management',['../autotoc_md86.html',1,'']]], - ['crash_20course_3a_20events_2c_20signals_20and_20everything_20in_20between',['Crash Course: events, signals and everything in between',['../autotoc_md89.html',1,'']]] + ['crash_20course_3a_20core_20functionalities_678',['Crash Course: core functionalities',['../md_docs_md_core.html',1,'']]], + ['crash_20course_3a_20entity_2dcomponent_20system_679',['Crash Course: entity-component system',['../md_docs_md_entity.html',1,'']]], + ['crash_20course_3a_20service_20locator_680',['Crash Course: service locator',['../md_docs_md_locator.html',1,'']]], + ['crash_20course_3a_20runtime_20reflection_20system_681',['Crash Course: runtime reflection system',['../md_docs_md_meta.html',1,'']]], + ['crash_20course_3a_20cooperative_20scheduler_682',['Crash Course: cooperative scheduler',['../md_docs_md_process.html',1,'']]], + ['crash_20course_3a_20resource_20management_683',['Crash Course: resource management',['../md_docs_md_resource.html',1,'']]], + ['crash_20course_3a_20events_2c_20signals_20and_20everything_20in_20between_684',['Crash Course: events, signals and everything in between',['../md_docs_md_signal.html',1,'']]] ]; diff --git a/search/pages_1.html b/search/pages_1.html index aedb14ee2..86c9cd3a2 100644 --- a/search/pages_1.html +++ b/search/pages_1.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/pages_1.js b/search/pages_1.js index d3013be40..2e885763c 100644 --- a/search/pages_1.js +++ b/search/pages_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['entt_20in_20action',['EnTT in Action',['../autotoc_md67.html',1,'']]] + ['entt_20in_20action_685',['EnTT in Action',['../md_docs_md_links.html',1,'']]] ]; diff --git a/search/pages_2.html b/search/pages_2.html index bd9159398..0c8adf594 100644 --- a/search/pages_2.html +++ b/search/pages_2.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/pages_2.js b/search/pages_2.js index e96066cc2..15634d156 100644 --- a/search/pages_2.js +++ b/search/pages_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['frequently_20asked_20questions',['Frequently Asked Questions',['../autotoc_md50.html',1,'']]] + ['frequently_20asked_20questions_686',['Frequently Asked Questions',['../md_docs_md_faq.html',1,'']]] ]; diff --git a/search/pages_3.html b/search/pages_3.html index bc0e37f20..7c591a21c 100644 --- a/search/pages_3.html +++ b/search/pages_3.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/pages_3.js b/search/pages_3.js index 2f4deee4e..34b91431f 100644 --- a/search/pages_3.js +++ b/search/pages_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['push_20entt_20across_20boundaries',['Push EnTT across boundaries',['../autotoc_md59.html',1,'']]] + ['push_20entt_20across_20boundaries_687',['Push EnTT across boundaries',['../md_docs_md_lib.html',1,'']]] ]; diff --git a/search/related_0.html b/search/related_0.html index 1db947bcf..530c782fa 100644 --- a/search/related_0.html +++ b/search/related_0.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/related_0.js b/search/related_0.js index 75d6b9c4a..08bb57bf1 100644 --- a/search/related_0.js +++ b/search/related_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['basic_5fregistry_3c_20entity_20_3e',['basic_registry< Entity >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::basic_registry< Entity >()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::basic_registry< Entity >()'],['../classentt_1_1basic__runtime__view.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_runtime_view::basic_registry< Entity >()'],['../classentt_1_1basic__snapshot.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_snapshot::basic_registry< Entity >()'],['../classentt_1_1basic__snapshot__loader.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_snapshot_loader::basic_registry< Entity >()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::basic_registry< Entity >()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_view< Entity, exclude_t<>, Component >::basic_registry< Entity >()']]] + ['basic_5fregistry_3c_20entity_20_3e_670',['basic_registry< Entity >',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::basic_registry< Entity >()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::basic_registry< Entity >()'],['../classentt_1_1basic__runtime__view.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_runtime_view::basic_registry< Entity >()'],['../classentt_1_1basic__snapshot.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_snapshot::basic_registry< Entity >()'],['../classentt_1_1basic__snapshot__loader.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_snapshot_loader::basic_registry< Entity >()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::basic_registry< Entity >()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a60c928831c22b7dd2216dbc469f68f24',1,'entt::basic_view< Entity, exclude_t<>, Component >::basic_registry< Entity >()']]] ]; diff --git a/search/related_1.html b/search/related_1.html index 413c6d4c3..8bf9e0714 100644 --- a/search/related_1.html +++ b/search/related_1.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/related_1.js b/search/related_1.js index 1df6a23d9..49db2c3e7 100644 --- a/search/related_1.js +++ b/search/related_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['cache_3c_20resource_20_3e',['cache< Resource >',['../classentt_1_1handle.html#adcd47fa89dbe180ef0db46d3f0c43762',1,'entt::handle::cache< Resource >()'],['../classentt_1_1loader.html#adcd47fa89dbe180ef0db46d3f0c43762',1,'entt::loader::cache< Resource >()']]] + ['cache_3c_20resource_20_3e_671',['cache< Resource >',['../classentt_1_1handle.html#adcd47fa89dbe180ef0db46d3f0c43762',1,'entt::handle::cache< Resource >()'],['../classentt_1_1loader.html#adcd47fa89dbe180ef0db46d3f0c43762',1,'entt::loader::cache< Resource >()']]] ]; diff --git a/search/related_2.html b/search/related_2.html index 60d1edea2..786b0c1bd 100644 --- a/search/related_2.html +++ b/search/related_2.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/related_2.js b/search/related_2.js index 375ad826b..d1815cdf5 100644 --- a/search/related_2.js +++ b/search/related_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['emitter',['emitter',['../structentt_1_1emitter_1_1connection.html#a0f3bb10ad57dc0e06298fc9ba38a7bd9',1,'entt::emitter::connection']]] + ['emitter_672',['emitter',['../structentt_1_1emitter_1_1connection.html#a0f3bb10ad57dc0e06298fc9ba38a7bd9',1,'entt::emitter::connection']]] ]; diff --git a/search/related_3.html b/search/related_3.html index 7b0e1d2af..76cf862ec 100644 --- a/search/related_3.html +++ b/search/related_3.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/related_3.js b/search/related_3.js index a78f60083..2044c9905 100644 --- a/search/related_3.js +++ b/search/related_3.js @@ -1,5 +1,5 @@ var searchData= [ - ['meta_5fany',['meta_any',['../classentt_1_1meta__handle.html#acfcd01bb919b388abc55d4567862dcdc',1,'entt::meta_handle']]], - ['meta_5fhandle',['meta_handle',['../classentt_1_1meta__any.html#a8b9314fab6c8ba30425b75c7b2e2977e',1,'entt::meta_any']]] + ['meta_5fany_673',['meta_any',['../classentt_1_1meta__handle.html#acfcd01bb919b388abc55d4567862dcdc',1,'entt::meta_handle']]], + ['meta_5fhandle_674',['meta_handle',['../classentt_1_1meta__any.html#a8b9314fab6c8ba30425b75c7b2e2977e',1,'entt::meta_any']]] ]; diff --git a/search/related_4.html b/search/related_4.html index 360ddb49f..a5e8ecb48 100644 --- a/search/related_4.html +++ b/search/related_4.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/related_4.js b/search/related_4.js index 6ebbdbe5b..5a494a945 100644 --- a/search/related_4.js +++ b/search/related_4.js @@ -1,6 +1,6 @@ var searchData= [ - ['sink',['sink',['../classentt_1_1connection.html#afe2b37ace8306e708a0dc76c658a4b19',1,'entt::connection']]], - ['sink_3c_20ret_28args_2e_2e_2e_29_3e',['sink< Ret(Args...)>',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a64484123196b777083143032560bae7d',1,'entt::sigh< Ret(Args...)>']]], - ['swap',['swap',['../classentt_1_1meta__any.html#a4dd041d6003f5977b94ad8a0853c136b',1,'entt::meta_any']]] + ['sink_675',['sink',['../classentt_1_1connection.html#afe2b37ace8306e708a0dc76c658a4b19',1,'entt::connection']]], + ['sink_3c_20ret_28args_2e_2e_2e_29_3e_676',['sink< Ret(Args...)>',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a64484123196b777083143032560bae7d',1,'entt::sigh< Ret(Args...)>']]], + ['swap_677',['swap',['../classentt_1_1meta__any.html#a4dd041d6003f5977b94ad8a0853c136b',1,'entt::meta_any']]] ]; diff --git a/search/search.js b/search/search.js index dedce3bf0..a554ab9cb 100644 --- a/search/search.js +++ b/search/search.js @@ -1,3 +1,26 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ function convertToId(search) { var result = ''; @@ -788,4 +811,4 @@ function init_search() } searchBox.OnSelectItem(0); } - +/* @license-end */ diff --git a/search/search_l.png b/search/search_l.png index c872f4da4..fd5f7daa4 100644 Binary files a/search/search_l.png and b/search/search_l.png differ diff --git a/search/search_r.png b/search/search_r.png index 97ee8b439..1af5d21ee 100644 Binary files a/search/search_r.png and b/search/search_r.png differ diff --git a/search/typedefs_0.html b/search/typedefs_0.html index 05722e1cc..8f30b85cf 100644 --- a/search/typedefs_0.html +++ b/search/typedefs_0.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_0.js b/search/typedefs_0.js index dd7e12d2a..835f175d3 100644 --- a/search/typedefs_0.js +++ b/search/typedefs_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['actor',['actor',['../namespaceentt.html#a3effdbc1557d9b1ffaed77f843c5c2cd',1,'entt']]] + ['actor_632',['actor',['../namespaceentt.html#a3effdbc1557d9b1ffaed77f843c5c2cd',1,'entt']]] ]; diff --git a/search/typedefs_1.html b/search/typedefs_1.html index b77c53383..0cfdad74f 100644 --- a/search/typedefs_1.html +++ b/search/typedefs_1.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_1.js b/search/typedefs_1.js index 2b4e66aeb..cf3f3bb43 100644 --- a/search/typedefs_1.js +++ b/search/typedefs_1.js @@ -1,6 +1,6 @@ var searchData= [ - ['const_5fiterator_5ftype',['const_iterator_type',['../classentt_1_1basic__storage.html#aaa02d4db8defee92683bbc47b3eaa869',1,'entt::basic_storage']]], - ['continuous_5floader',['continuous_loader',['../namespaceentt.html#a37b5b489846f6f2a5d143db2b4aea5d0',1,'entt']]], - ['current_5ftype',['current_type',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#ac7c32cf26795aa4fc08d21597c68bc3d',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >']]] + ['const_5fiterator_5ftype_633',['const_iterator_type',['../classentt_1_1basic__storage.html#aaa02d4db8defee92683bbc47b3eaa869',1,'entt::basic_storage']]], + ['continuous_5floader_634',['continuous_loader',['../namespaceentt.html#a37b5b489846f6f2a5d143db2b4aea5d0',1,'entt']]], + ['current_5ftype_635',['current_type',['../structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html#ac7c32cf26795aa4fc08d21597c68bc3d',1,'entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >']]] ]; diff --git a/search/typedefs_2.html b/search/typedefs_2.html index 076311dc5..d633f0cef 100644 --- a/search/typedefs_2.html +++ b/search/typedefs_2.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_2.js b/search/typedefs_2.js index ef73d1a0b..76211ccb0 100644 --- a/search/typedefs_2.js +++ b/search/typedefs_2.js @@ -1,5 +1,5 @@ var searchData= [ - ['delta_5ftype',['delta_type',['../classentt_1_1process.html#a625b574ea6d83e3a4933acc3d0279295',1,'entt::process']]], - ['difference_5ftype',['difference_type',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#ac16a602de26d43d316b497cb11b7c6b2',1,'entt::entt_traits< std::uint16_t >::difference_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a9809b457e16f4a071a91530b23c930d6',1,'entt::entt_traits< std::uint32_t >::difference_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#afba2f77f80b0bf89a208f6876ab67271',1,'entt::entt_traits< std::uint64_t >::difference_type()']]] + ['delta_5ftype_636',['delta_type',['../classentt_1_1process.html#a625b574ea6d83e3a4933acc3d0279295',1,'entt::process']]], + ['difference_5ftype_637',['difference_type',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#ac16a602de26d43d316b497cb11b7c6b2',1,'entt::entt_traits< std::uint16_t >::difference_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a9809b457e16f4a071a91530b23c930d6',1,'entt::entt_traits< std::uint32_t >::difference_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#afba2f77f80b0bf89a208f6876ab67271',1,'entt::entt_traits< std::uint64_t >::difference_type()']]] ]; diff --git a/search/typedefs_3.html b/search/typedefs_3.html index a4a727ff1..6a6421d3d 100644 --- a/search/typedefs_3.html +++ b/search/typedefs_3.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_3.js b/search/typedefs_3.js index c63aa7519..2ad011e55 100644 --- a/search/typedefs_3.js +++ b/search/typedefs_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['entity_5ftype',['entity_type',['../structentt_1_1basic__actor.html#a2c2e10f12014f5269be0b9ab055acfca',1,'entt::basic_actor::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a86e202c8932f341626b29c194bd47489',1,'entt::entt_traits< std::uint16_t >::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#aecde3ac9bfc28e7f0f880a74ee2c5d8f',1,'entt::entt_traits< std::uint32_t >::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a304eb4dc4a1487cf2966d902214f7185',1,'entt::entt_traits< std::uint64_t >::entity_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abd2668a2f5cd24eeb4fe5b20f8001e33',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::entity_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ac46b1e783b4e723442366071f9f23fce',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::entity_type()'],['../classentt_1_1basic__observer.html#af7a57f53ed7a6c835129480ff6594f7d',1,'entt::basic_observer::entity_type()'],['../classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138',1,'entt::basic_registry::entity_type()'],['../classentt_1_1basic__runtime__view.html#a7ede80f53e93473099819167d42bf2f1',1,'entt::basic_runtime_view::entity_type()'],['../classentt_1_1basic__continuous__loader.html#a90a0d33147978cb3c142408487428277',1,'entt::basic_continuous_loader::entity_type()'],['../classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780',1,'entt::sparse_set::entity_type()'],['../classentt_1_1basic__storage.html#ab49ab5a065759dcd17f6c0b6a0b8fcba',1,'entt::basic_storage::entity_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ae5fde5ec382c377b2d2fff3b8bacb6cd',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::entity_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::entity_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533',1,'entt::basic_view< Entity, exclude_t<>, Component >::entity_type()']]] + ['entity_5ftype_638',['entity_type',['../structentt_1_1basic__actor.html#a2c2e10f12014f5269be0b9ab055acfca',1,'entt::basic_actor::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a86e202c8932f341626b29c194bd47489',1,'entt::entt_traits< std::uint16_t >::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#aecde3ac9bfc28e7f0f880a74ee2c5d8f',1,'entt::entt_traits< std::uint32_t >::entity_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a304eb4dc4a1487cf2966d902214f7185',1,'entt::entt_traits< std::uint64_t >::entity_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abd2668a2f5cd24eeb4fe5b20f8001e33',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::entity_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ac46b1e783b4e723442366071f9f23fce',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::entity_type()'],['../classentt_1_1basic__observer.html#af7a57f53ed7a6c835129480ff6594f7d',1,'entt::basic_observer::entity_type()'],['../classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138',1,'entt::basic_registry::entity_type()'],['../classentt_1_1basic__runtime__view.html#a7ede80f53e93473099819167d42bf2f1',1,'entt::basic_runtime_view::entity_type()'],['../classentt_1_1basic__continuous__loader.html#a90a0d33147978cb3c142408487428277',1,'entt::basic_continuous_loader::entity_type()'],['../classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780',1,'entt::sparse_set::entity_type()'],['../classentt_1_1basic__storage.html#ab49ab5a065759dcd17f6c0b6a0b8fcba',1,'entt::basic_storage::entity_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ae5fde5ec382c377b2d2fff3b8bacb6cd',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::entity_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::entity_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533',1,'entt::basic_view< Entity, exclude_t<>, Component >::entity_type()']]] ]; diff --git a/search/typedefs_4.html b/search/typedefs_4.html index be033cd19..517e61d34 100644 --- a/search/typedefs_4.html +++ b/search/typedefs_4.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_4.js b/search/typedefs_4.js index 7cb908829..7a92e4d2a 100644 --- a/search/typedefs_4.js +++ b/search/typedefs_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['family_5ftype',['family_type',['../classentt_1_1family.html#a86a662c9342935bcf145b70bf36191cb',1,'entt::family']]], - ['function_5ftype',['function_type',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a235927a00f56e4b56dbfdc4e6cf5ddb4',1,'entt::delegate< Ret(Args...)>']]] + ['family_5ftype_639',['family_type',['../classentt_1_1family.html#a86a662c9342935bcf145b70bf36191cb',1,'entt::family']]], + ['function_5ftype_640',['function_type',['../classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a235927a00f56e4b56dbfdc4e6cf5ddb4',1,'entt::delegate< Ret(Args...)>']]] ]; diff --git a/search/typedefs_5.html b/search/typedefs_5.html index e10c325b5..ea1e3be76 100644 --- a/search/typedefs_5.html +++ b/search/typedefs_5.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_5.js b/search/typedefs_5.js index a1ac1da5c..d7d9a47b0 100644 --- a/search/typedefs_5.js +++ b/search/typedefs_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['group',['group',['../namespaceentt.html#a010d1bbf234dbca47e6755fc278e36b5',1,'entt']]] + ['group_641',['group',['../namespaceentt.html#a010d1bbf234dbca47e6755fc278e36b5',1,'entt']]] ]; diff --git a/search/typedefs_6.html b/search/typedefs_6.html index 4e206e874..ad90ec22e 100644 --- a/search/typedefs_6.html +++ b/search/typedefs_6.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_6.js b/search/typedefs_6.js index 145a018c5..af1dee2ee 100644 --- a/search/typedefs_6.js +++ b/search/typedefs_6.js @@ -1,6 +1,6 @@ var searchData= [ - ['hash_5ftype',['hash_type',['../classentt_1_1basic__hashed__string.html#a7ee7dca5383cf4507949dc1261ca5efd',1,'entt::basic_hashed_string']]], - ['hashed_5fstring',['hashed_string',['../namespaceentt.html#a8f9dd22ce26cd7913a294b3fd520649b',1,'entt']]], - ['hashed_5fwstring',['hashed_wstring',['../namespaceentt.html#af2768719b1f5967caf5836b2656d0ed6',1,'entt']]] + ['hash_5ftype_642',['hash_type',['../classentt_1_1basic__hashed__string.html#a7ee7dca5383cf4507949dc1261ca5efd',1,'entt::basic_hashed_string']]], + ['hashed_5fstring_643',['hashed_string',['../namespaceentt.html#a8f9dd22ce26cd7913a294b3fd520649b',1,'entt']]], + ['hashed_5fwstring_644',['hashed_wstring',['../namespaceentt.html#af2768719b1f5967caf5836b2656d0ed6',1,'entt']]] ]; diff --git a/search/typedefs_7.html b/search/typedefs_7.html index cc182ee6c..ea605fab9 100644 --- a/search/typedefs_7.html +++ b/search/typedefs_7.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_7.js b/search/typedefs_7.js index 456f161d7..cc2058938 100644 --- a/search/typedefs_7.js +++ b/search/typedefs_7.js @@ -1,7 +1,7 @@ var searchData= [ - ['id_5ftype',['id_type',['../structentt_1_1cache.html#a1baf9a66880b54284abb9a492229c639',1,'entt::cache']]], - ['identifier_5ftype',['identifier_type',['../classentt_1_1identifier.html#ae35c46f5811183291dd25294e7d82f92',1,'entt::identifier']]], - ['instance_5ftype',['instance_type',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a932f446e04a732546e7af0f2922ed2fa',1,'entt::sigh< Ret(Args...)>']]], - ['iterator_5ftype',['iterator_type',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a8b74d17f862c35fad975a557de40590f',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::iterator_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a90bde6cba7ff622e3ebfa898b3f8a9c1',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::iterator_type()'],['../classentt_1_1basic__observer.html#a7954b77084292847aa1c8da9f22d8443',1,'entt::basic_observer::iterator_type()'],['../classentt_1_1basic__runtime__view.html#afbaa87a1aa3eacd54ec3a5462faa10da',1,'entt::basic_runtime_view::iterator_type()'],['../classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469',1,'entt::sparse_set::iterator_type()'],['../classentt_1_1basic__storage.html#a9a1c32a0adebc8c3dc279064742c858f',1,'entt::basic_storage::iterator_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a3104937f03f1cf10c5804e8928107d80',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::iterator_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::iterator_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab',1,'entt::basic_view< Entity, exclude_t<>, Component >::iterator_type()']]] + ['id_5ftype_645',['id_type',['../structentt_1_1cache.html#a1baf9a66880b54284abb9a492229c639',1,'entt::cache']]], + ['identifier_5ftype_646',['identifier_type',['../classentt_1_1identifier.html#ae35c46f5811183291dd25294e7d82f92',1,'entt::identifier']]], + ['instance_5ftype_647',['instance_type',['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#a932f446e04a732546e7af0f2922ed2fa',1,'entt::sigh< Ret(Args...)>']]], + ['iterator_5ftype_648',['iterator_type',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a8b74d17f862c35fad975a557de40590f',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::iterator_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a90bde6cba7ff622e3ebfa898b3f8a9c1',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::iterator_type()'],['../classentt_1_1basic__observer.html#a7954b77084292847aa1c8da9f22d8443',1,'entt::basic_observer::iterator_type()'],['../classentt_1_1basic__runtime__view.html#afbaa87a1aa3eacd54ec3a5462faa10da',1,'entt::basic_runtime_view::iterator_type()'],['../classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469',1,'entt::sparse_set::iterator_type()'],['../classentt_1_1basic__storage.html#a9a1c32a0adebc8c3dc279064742c858f',1,'entt::basic_storage::iterator_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a3104937f03f1cf10c5804e8928107d80',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::iterator_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::iterator_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab',1,'entt::basic_view< Entity, exclude_t<>, Component >::iterator_type()']]] ]; diff --git a/search/typedefs_8.html b/search/typedefs_8.html index 9379676b7..afb18b101 100644 --- a/search/typedefs_8.html +++ b/search/typedefs_8.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_8.js b/search/typedefs_8.js index c8beb8d0d..d9b46701e 100644 --- a/search/typedefs_8.js +++ b/search/typedefs_8.js @@ -1,4 +1,4 @@ var searchData= [ - ['listener',['listener',['../classentt_1_1emitter.html#a460311b6b4adfabe69b9d964c8d0b579',1,'entt::emitter']]] + ['listener_649',['listener',['../classentt_1_1emitter.html#a460311b6b4adfabe69b9d964c8d0b579',1,'entt::emitter']]] ]; diff --git a/search/typedefs_9.html b/search/typedefs_9.html index 6f2b9ea41..cb4a0e549 100644 --- a/search/typedefs_9.html +++ b/search/typedefs_9.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_9.js b/search/typedefs_9.js index 5f7c7886c..ce9ee7b20 100644 --- a/search/typedefs_9.js +++ b/search/typedefs_9.js @@ -1,4 +1,4 @@ var searchData= [ - ['named_5ftype_5ftraits_5ft',['named_type_traits_t',['../namespaceentt.html#a63a1328e9f26407f68f4f814ab86ad6f',1,'entt']]] + ['named_5ftype_5ftraits_5ft_650',['named_type_traits_t',['../namespaceentt.html#a63a1328e9f26407f68f4f814ab86ad6f',1,'entt']]] ]; diff --git a/search/typedefs_a.html b/search/typedefs_a.html index b897e1cf7..d17d6cc2b 100644 --- a/search/typedefs_a.html +++ b/search/typedefs_a.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_a.js b/search/typedefs_a.js index 3d46273ff..9aac0555b 100644 --- a/search/typedefs_a.js +++ b/search/typedefs_a.js @@ -1,5 +1,5 @@ var searchData= [ - ['object_5ftype',['object_type',['../classentt_1_1basic__storage.html#aa4e4358d25212b71d9629e470b845c53',1,'entt::basic_storage::object_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ac8d68c5302c6f7b8f6ad6663d95eea25',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::object_type()']]], - ['observer',['observer',['../namespaceentt.html#a48dfbb2991c5a19c6e2578830f7e3eda',1,'entt']]] + ['object_5ftype_651',['object_type',['../classentt_1_1basic__storage.html#aa4e4358d25212b71d9629e470b845c53',1,'entt::basic_storage::object_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ac8d68c5302c6f7b8f6ad6663d95eea25',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::object_type()']]], + ['observer_652',['observer',['../namespaceentt.html#a48dfbb2991c5a19c6e2578830f7e3eda',1,'entt']]] ]; diff --git a/search/typedefs_b.html b/search/typedefs_b.html index 23bfdac3e..e1e48277e 100644 --- a/search/typedefs_b.html +++ b/search/typedefs_b.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_b.js b/search/typedefs_b.js index 2f2e31fef..6d93182e7 100644 --- a/search/typedefs_b.js +++ b/search/typedefs_b.js @@ -1,8 +1,8 @@ var searchData= [ - ['raw_5ftype',['raw_type',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8bd979c3e567bccfbc7a598442092d81',1,'entt::basic_view< Entity, exclude_t<>, Component >']]], - ['registry',['registry',['../namespaceentt.html#a292643317d1dbb13e45824f757bd1086',1,'entt']]], - ['registry_5ftype',['registry_type',['../structentt_1_1basic__actor.html#a4577b087e2fe3e76dbd4516ae9064c6a',1,'entt::basic_actor::registry_type()'],['../structentt_1_1as__view.html#a458942b049c7ef96d45600337d57a70b',1,'entt::as_view::registry_type()'],['../structentt_1_1as__group.html#a7ede36514bf64187bc93d3d295fe0123',1,'entt::as_group::registry_type()']]], - ['resource_5ftype',['resource_type',['../structentt_1_1cache.html#ada5e8c7f595aed30fa4f879fe71e7baf',1,'entt::cache']]], - ['runtime_5fview',['runtime_view',['../namespaceentt.html#a85d470a55d982d87388e899c322e9ddc',1,'entt']]] + ['raw_5ftype_653',['raw_type',['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8bd979c3e567bccfbc7a598442092d81',1,'entt::basic_view< Entity, exclude_t<>, Component >']]], + ['registry_654',['registry',['../namespaceentt.html#a292643317d1dbb13e45824f757bd1086',1,'entt']]], + ['registry_5ftype_655',['registry_type',['../structentt_1_1basic__actor.html#a4577b087e2fe3e76dbd4516ae9064c6a',1,'entt::basic_actor::registry_type()'],['../structentt_1_1as__view.html#a458942b049c7ef96d45600337d57a70b',1,'entt::as_view::registry_type()'],['../structentt_1_1as__group.html#a7ede36514bf64187bc93d3d295fe0123',1,'entt::as_group::registry_type()']]], + ['resource_5ftype_656',['resource_type',['../structentt_1_1cache.html#ada5e8c7f595aed30fa4f879fe71e7baf',1,'entt::cache']]], + ['runtime_5fview_657',['runtime_view',['../namespaceentt.html#a85d470a55d982d87388e899c322e9ddc',1,'entt']]] ]; diff --git a/search/typedefs_c.html b/search/typedefs_c.html index 28f5aad20..dc78ef49a 100644 --- a/search/typedefs_c.html +++ b/search/typedefs_c.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_c.js b/search/typedefs_c.js index a16c32427..7fedac081 100644 --- a/search/typedefs_c.js +++ b/search/typedefs_c.js @@ -1,8 +1,8 @@ var searchData= [ - ['service_5ftype',['service_type',['../structentt_1_1service__locator.html#af34a883e56f32a98d7b8a5db87bdf504',1,'entt::service_locator']]], - ['sink_5ftype',['sink_type',['../classentt_1_1dispatcher.html#a9ab3b084146a292b2dd2411cea452273',1,'entt::dispatcher::sink_type()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#aa38cfb19329979f98307eff7a75cc2af',1,'entt::sigh< Ret(Args...)>::sink_type()']]], - ['size_5ftype',['size_type',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abdaf90d7a55b932927cfcb6a14cb3068',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a1c83478c5db4749a31a4fb638901a153',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size_type()'],['../classentt_1_1basic__observer.html#a147a0e35035fc3c19b67b31d66d2d80b',1,'entt::basic_observer::size_type()'],['../classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636',1,'entt::basic_registry::size_type()'],['../classentt_1_1basic__runtime__view.html#aabb4450ce3d686fe05bd92e5975d11fb',1,'entt::basic_runtime_view::size_type()'],['../classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1',1,'entt::sparse_set::size_type()'],['../classentt_1_1basic__storage.html#afffeca2fda54eebf889c2e4f447ab37b',1,'entt::basic_storage::size_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a1c6a84ddddca748a2de04c448179b9e5',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::size_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1e689febb974e9855dc2b033ae240643',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a6df04cc90dcce96291a88546aa287ca7',1,'entt::basic_view< Entity, exclude_t<>, Component >::size_type()'],['../structentt_1_1meta__ctor.html#a7a267e333222dab22e7a965137538f18',1,'entt::meta_ctor::size_type()'],['../structentt_1_1meta__func.html#a422ec572c7c56d3cb46d09704be64f65',1,'entt::meta_func::size_type()'],['../classentt_1_1meta__type.html#a7362687fc89444507cded22f57be3ff0',1,'entt::meta_type::size_type()'],['../classentt_1_1scheduler.html#afcec47d6ec28a994af2a7097348ce59f',1,'entt::scheduler::size_type()'],['../structentt_1_1cache.html#aee66d7039b665d6636be29c255065aa3',1,'entt::cache::size_type()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#aa1eb227b5cb5c4910dacccd38748a209',1,'entt::sigh< Ret(Args...)>::size_type()']]], - ['snapshot',['snapshot',['../namespaceentt.html#a80012f9fa628920a3507ae947704d447',1,'entt']]], - ['snapshot_5floader',['snapshot_loader',['../namespaceentt.html#ae7e50fc296c4ea68183db332950b99f5',1,'entt']]] + ['service_5ftype_658',['service_type',['../structentt_1_1service__locator.html#af34a883e56f32a98d7b8a5db87bdf504',1,'entt::service_locator']]], + ['sink_5ftype_659',['sink_type',['../classentt_1_1dispatcher.html#a9ab3b084146a292b2dd2411cea452273',1,'entt::dispatcher::sink_type()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#aa38cfb19329979f98307eff7a75cc2af',1,'entt::sigh< Ret(Args...)>::sink_type()']]], + ['size_5ftype_660',['size_type',['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abdaf90d7a55b932927cfcb6a14cb3068',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... > >::size_type()'],['../classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a1c83478c5db4749a31a4fb638901a153',1,'entt::basic_group< Entity, exclude_t< Exclude... >, get_t< Get... >, Owned... >::size_type()'],['../classentt_1_1basic__observer.html#a147a0e35035fc3c19b67b31d66d2d80b',1,'entt::basic_observer::size_type()'],['../classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636',1,'entt::basic_registry::size_type()'],['../classentt_1_1basic__runtime__view.html#aabb4450ce3d686fe05bd92e5975d11fb',1,'entt::basic_runtime_view::size_type()'],['../classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1',1,'entt::sparse_set::size_type()'],['../classentt_1_1basic__storage.html#afffeca2fda54eebf889c2e4f447ab37b',1,'entt::basic_storage::size_type()'],['../classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a1c6a84ddddca748a2de04c448179b9e5',1,'entt::basic_storage< Entity, Type, std::enable_if_t< ENTT_ENABLE_ETO(Type)> >::size_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1e689febb974e9855dc2b033ae240643',1,'entt::basic_view< Entity, exclude_t< Exclude... >, Component... >::size_type()'],['../classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a6df04cc90dcce96291a88546aa287ca7',1,'entt::basic_view< Entity, exclude_t<>, Component >::size_type()'],['../structentt_1_1meta__ctor.html#a7a267e333222dab22e7a965137538f18',1,'entt::meta_ctor::size_type()'],['../structentt_1_1meta__func.html#a422ec572c7c56d3cb46d09704be64f65',1,'entt::meta_func::size_type()'],['../classentt_1_1meta__type.html#a7362687fc89444507cded22f57be3ff0',1,'entt::meta_type::size_type()'],['../classentt_1_1scheduler.html#afcec47d6ec28a994af2a7097348ce59f',1,'entt::scheduler::size_type()'],['../structentt_1_1cache.html#aee66d7039b665d6636be29c255065aa3',1,'entt::cache::size_type()'],['../classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html#aa1eb227b5cb5c4910dacccd38748a209',1,'entt::sigh< Ret(Args...)>::size_type()']]], + ['snapshot_661',['snapshot',['../namespaceentt.html#a80012f9fa628920a3507ae947704d447',1,'entt']]], + ['snapshot_5floader_662',['snapshot_loader',['../namespaceentt.html#ae7e50fc296c4ea68183db332950b99f5',1,'entt']]] ]; diff --git a/search/typedefs_d.html b/search/typedefs_d.html index 15794829d..dacc9788c 100644 --- a/search/typedefs_d.html +++ b/search/typedefs_d.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_d.js b/search/typedefs_d.js index edc0461ab..8b048bf61 100644 --- a/search/typedefs_d.js +++ b/search/typedefs_d.js @@ -1,7 +1,7 @@ var searchData= [ - ['tag',['tag',['../namespaceentt.html#a4f264daab30d8e01b88536aa43fe0c28',1,'entt']]], - ['type',['type',['../structentt_1_1type__list__cat_3_4.html#a957e88d5bc4c1cbf4a13fbddbe2e176f',1,'entt::type_list_cat<>::type()'],['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_00_01type__list_3_01Other_8_8_8_01_4_00_01List_8_8_8_01_4.html#ae17db475954ad06eba24fd1eedba5f8b',1,'entt::type_list_cat< type_list< Type... >, type_list< Other... >, List... >::type()'],['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_01_4.html#a0c40287fad9d80f0532d80bf48f219ed',1,'entt::type_list_cat< type_list< Type... > >::type()'],['../structentt_1_1type__list__unique_3_01type__list_3_01Type_00_01Other_8_8_8_01_4_01_4.html#a378823486aa4e4f288b1d73b2703c485',1,'entt::type_list_unique< type_list< Type, Other... > >::type()'],['../structentt_1_1type__list__unique_3_01type__list_3_4_01_4.html#a48245981f9818ca2601b9815cbfa5b79',1,'entt::type_list_unique< type_list<> >::type()']]], - ['type_5flist_5fcat_5ft',['type_list_cat_t',['../namespaceentt.html#a546467a3662e9a915d5d519ad565e801',1,'entt']]], - ['type_5flist_5funique_5ft',['type_list_unique_t',['../namespaceentt.html#a75a277a6037279d65cd3874b46ec7166',1,'entt']]] + ['tag_663',['tag',['../namespaceentt.html#a4f264daab30d8e01b88536aa43fe0c28',1,'entt']]], + ['type_664',['type',['../structentt_1_1type__list__cat_3_4.html#a957e88d5bc4c1cbf4a13fbddbe2e176f',1,'entt::type_list_cat<>::type()'],['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_00_01type__list_3_01Other_8_8_8_01_4_00_01List_8_8_8_01_4.html#ae17db475954ad06eba24fd1eedba5f8b',1,'entt::type_list_cat< type_list< Type... >, type_list< Other... >, List... >::type()'],['../structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_01_4.html#a0c40287fad9d80f0532d80bf48f219ed',1,'entt::type_list_cat< type_list< Type... > >::type()'],['../structentt_1_1type__list__unique_3_01type__list_3_01Type_00_01Other_8_8_8_01_4_01_4.html#a378823486aa4e4f288b1d73b2703c485',1,'entt::type_list_unique< type_list< Type, Other... > >::type()'],['../structentt_1_1type__list__unique_3_01type__list_3_4_01_4.html#a48245981f9818ca2601b9815cbfa5b79',1,'entt::type_list_unique< type_list<> >::type()']]], + ['type_5flist_5fcat_5ft_665',['type_list_cat_t',['../namespaceentt.html#a546467a3662e9a915d5d519ad565e801',1,'entt']]], + ['type_5flist_5funique_5ft_666',['type_list_unique_t',['../namespaceentt.html#a75a277a6037279d65cd3874b46ec7166',1,'entt']]] ]; diff --git a/search/typedefs_e.html b/search/typedefs_e.html index f61d902eb..5a5563e83 100644 --- a/search/typedefs_e.html +++ b/search/typedefs_e.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/typedefs_e.js b/search/typedefs_e.js index 637580c82..ac78cdb31 100644 --- a/search/typedefs_e.js +++ b/search/typedefs_e.js @@ -1,6 +1,6 @@ var searchData= [ - ['value_5ftype',['value_type',['../classentt_1_1basic__hashed__string.html#ad4e8f181e92b9218747ac43fe24c4cbc',1,'entt::basic_hashed_string']]], - ['version_5ftype',['version_type',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#ab37d10c3be3d59159a63c0bd1e9e2924',1,'entt::entt_traits< std::uint16_t >::version_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#aee59dc7455ea0be015e699c3e46a22d1',1,'entt::entt_traits< std::uint32_t >::version_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#aeac4d9172940a9dec0682860ac176725',1,'entt::entt_traits< std::uint64_t >::version_type()'],['../classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6',1,'entt::basic_registry::version_type()']]], - ['view',['view',['../namespaceentt.html#af2118c00dea16193aee017d1408beb53',1,'entt']]] + ['value_5ftype_667',['value_type',['../classentt_1_1basic__hashed__string.html#ad4e8f181e92b9218747ac43fe24c4cbc',1,'entt::basic_hashed_string']]], + ['version_5ftype_668',['version_type',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#ab37d10c3be3d59159a63c0bd1e9e2924',1,'entt::entt_traits< std::uint16_t >::version_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#aee59dc7455ea0be015e699c3e46a22d1',1,'entt::entt_traits< std::uint32_t >::version_type()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#aeac4d9172940a9dec0682860ac176725',1,'entt::entt_traits< std::uint64_t >::version_type()'],['../classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6',1,'entt::basic_registry::version_type()']]], + ['view_669',['view',['../namespaceentt.html#af2118c00dea16193aee017d1408beb53',1,'entt']]] ]; diff --git a/search/variables_0.html b/search/variables_0.html index 74ce80724..a2a3ae625 100644 --- a/search/variables_0.html +++ b/search/variables_0.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/variables_0.js b/search/variables_0.js index 171ec4104..3aebcf0c5 100644 --- a/search/variables_0.js +++ b/search/variables_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['as_5falias',['as_alias',['../namespaceentt.html#abb24e649324b83ebcf9dea9c970b1e2d',1,'entt']]] + ['as_5falias_616',['as_alias',['../namespaceentt.html#abb24e649324b83ebcf9dea9c970b1e2d',1,'entt']]] ]; diff --git a/search/variables_1.html b/search/variables_1.html index 84237b6e7..b243c4237 100644 --- a/search/variables_1.html +++ b/search/variables_1.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/variables_1.js b/search/variables_1.js index 94fcce69b..58031f0de 100644 --- a/search/variables_1.js +++ b/search/variables_1.js @@ -1,6 +1,6 @@ var searchData= [ - ['choice',['choice',['../namespaceentt.html#a089f75043b082abca3ea144bce44e9ae',1,'entt']]], - ['collector',['collector',['../namespaceentt.html#aea8b073b774362fe800d9cce3542927a',1,'entt']]], - ['connect_5farg',['connect_arg',['../namespaceentt.html#af1e73acd6f3d892955819677dc2664b7',1,'entt']]] + ['choice_617',['choice',['../namespaceentt.html#a089f75043b082abca3ea144bce44e9ae',1,'entt']]], + ['collector_618',['collector',['../namespaceentt.html#aea8b073b774362fe800d9cce3542927a',1,'entt']]], + ['connect_5farg_619',['connect_arg',['../namespaceentt.html#af1e73acd6f3d892955819677dc2664b7',1,'entt']]] ]; diff --git a/search/variables_2.html b/search/variables_2.html index 5c9de1aab..647df20ff 100644 --- a/search/variables_2.html +++ b/search/variables_2.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/variables_2.js b/search/variables_2.js index 136b09403..1d58a26c8 100644 --- a/search/variables_2.js +++ b/search/variables_2.js @@ -1,6 +1,6 @@ var searchData= [ - ['entity_5fmask',['entity_mask',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a3b85bff62534fc16597a391161fdc884',1,'entt::entt_traits< std::uint16_t >::entity_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a10edcf27d0e80e58102f41372d4b8df8',1,'entt::entt_traits< std::uint32_t >::entity_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a1127933a9ef4bfa4f64ded191b4342dd',1,'entt::entt_traits< std::uint64_t >::entity_mask()']]], - ['entity_5fshift',['entity_shift',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#aedc1e30160a37f69a5e6cc903a5113cc',1,'entt::entt_traits< std::uint16_t >::entity_shift()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#ad2fb05bba66c9426a4c239222a191650',1,'entt::entt_traits< std::uint32_t >::entity_shift()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#abbf9ff9ddaf2cb92eec8bd08dcc7d5a7',1,'entt::entt_traits< std::uint64_t >::entity_shift()']]], - ['exclude',['exclude',['../namespaceentt.html#a5b73210cef43c4db35ef8ce477cc38a6',1,'entt']]] + ['entity_5fmask_620',['entity_mask',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a3b85bff62534fc16597a391161fdc884',1,'entt::entt_traits< std::uint16_t >::entity_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a10edcf27d0e80e58102f41372d4b8df8',1,'entt::entt_traits< std::uint32_t >::entity_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a1127933a9ef4bfa4f64ded191b4342dd',1,'entt::entt_traits< std::uint64_t >::entity_mask()']]], + ['entity_5fshift_621',['entity_shift',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#aedc1e30160a37f69a5e6cc903a5113cc',1,'entt::entt_traits< std::uint16_t >::entity_shift()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#ad2fb05bba66c9426a4c239222a191650',1,'entt::entt_traits< std::uint32_t >::entity_shift()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#abbf9ff9ddaf2cb92eec8bd08dcc7d5a7',1,'entt::entt_traits< std::uint64_t >::entity_shift()']]], + ['exclude_622',['exclude',['../namespaceentt.html#a5b73210cef43c4db35ef8ce477cc38a6',1,'entt']]] ]; diff --git a/search/variables_3.html b/search/variables_3.html index f95e34c60..9dc9b89ed 100644 --- a/search/variables_3.html +++ b/search/variables_3.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/variables_3.js b/search/variables_3.js index fed0ff145..ed0bfb348 100644 --- a/search/variables_3.js +++ b/search/variables_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['get',['get',['../namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e',1,'entt']]] + ['get_623',['get',['../namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e',1,'entt']]] ]; diff --git a/search/variables_4.html b/search/variables_4.html index d7db285ee..78cc2c709 100644 --- a/search/variables_4.html +++ b/search/variables_4.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/variables_4.js b/search/variables_4.js index 8647e8d40..aff87bf2e 100644 --- a/search/variables_4.js +++ b/search/variables_4.js @@ -1,5 +1,5 @@ var searchData= [ - ['is_5fequality_5fcomparable_5fv',['is_equality_comparable_v',['../namespaceentt.html#aff2c2c940fcfd655abaa24489471dad8',1,'entt']]], - ['is_5fnamed_5ftype_5fv',['is_named_type_v',['../namespaceentt.html#ab127297f5449d5c90bcef166a12c4358',1,'entt']]] + ['is_5fequality_5fcomparable_5fv_624',['is_equality_comparable_v',['../namespaceentt.html#aff2c2c940fcfd655abaa24489471dad8',1,'entt']]], + ['is_5fnamed_5ftype_5fv_625',['is_named_type_v',['../namespaceentt.html#ab127297f5449d5c90bcef166a12c4358',1,'entt']]] ]; diff --git a/search/variables_5.html b/search/variables_5.html index 7bbceeb0d..dfa355882 100644 --- a/search/variables_5.html +++ b/search/variables_5.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/variables_5.js b/search/variables_5.js index b860775c9..55b92ae8a 100644 --- a/search/variables_5.js +++ b/search/variables_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['monostate_5fv',['monostate_v',['../namespaceentt.html#ab43a13f7ee60bcb0d04a001f92b86fa2',1,'entt']]] + ['monostate_5fv_626',['monostate_v',['../namespaceentt.html#ab43a13f7ee60bcb0d04a001f92b86fa2',1,'entt']]] ]; diff --git a/search/variables_6.html b/search/variables_6.html index 4eb162d67..cd462bde7 100644 --- a/search/variables_6.html +++ b/search/variables_6.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/variables_6.js b/search/variables_6.js index f3a086726..2c59dd9f3 100644 --- a/search/variables_6.js +++ b/search/variables_6.js @@ -1,5 +1,5 @@ var searchData= [ - ['named_5ftype_5ftraits_5fv',['named_type_traits_v',['../namespaceentt.html#aacb84576de3485174075a28f5357b20d',1,'entt']]], - ['null',['null',['../namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17',1,'entt']]] + ['named_5ftype_5ftraits_5fv_627',['named_type_traits_v',['../namespaceentt.html#aacb84576de3485174075a28f5357b20d',1,'entt']]], + ['null_628',['null',['../namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17',1,'entt']]] ]; diff --git a/search/variables_7.html b/search/variables_7.html index 040882958..47994b80f 100644 --- a/search/variables_7.html +++ b/search/variables_7.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/variables_7.js b/search/variables_7.js index 87540e1d9..6f456a943 100644 --- a/search/variables_7.js +++ b/search/variables_7.js @@ -1,5 +1,5 @@ var searchData= [ - ['type',['type',['../classentt_1_1family.html#ad2c16ecd854f12f1aa70ceaba094e43a',1,'entt::family::type()'],['../classentt_1_1identifier.html#adb3aad553b8d57ef94581af39fc53178',1,'entt::identifier::type()']]], - ['type_5flist_5fsize_5fv',['type_list_size_v',['../namespaceentt.html#a6a9c0b65bfb15bb63c8389391be28eb5',1,'entt']]] + ['type_629',['type',['../classentt_1_1family.html#ad2c16ecd854f12f1aa70ceaba094e43a',1,'entt::family::type()'],['../classentt_1_1identifier.html#adb3aad553b8d57ef94581af39fc53178',1,'entt::identifier::type()']]], + ['type_5flist_5fsize_5fv_630',['type_list_size_v',['../namespaceentt.html#a6a9c0b65bfb15bb63c8389391be28eb5',1,'entt']]] ]; diff --git a/search/variables_8.html b/search/variables_8.html index d54d09666..a50ee8f56 100644 --- a/search/variables_8.html +++ b/search/variables_8.html @@ -1,7 +1,7 @@ - + - + @@ -11,15 +11,19 @@
    Loading...
    Searching...
    No Matches
    diff --git a/search/variables_8.js b/search/variables_8.js index 5a7af64e4..22c015b52 100644 --- a/search/variables_8.js +++ b/search/variables_8.js @@ -1,4 +1,4 @@ var searchData= [ - ['version_5fmask',['version_mask',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a83bda73c5a360f5ba8f653d0f888993b',1,'entt::entt_traits< std::uint16_t >::version_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a6ada978f907780643740d9ca2a8e8762',1,'entt::entt_traits< std::uint32_t >::version_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a3f9f70e677d638708d0ce72ce1a28c92',1,'entt::entt_traits< std::uint64_t >::version_mask()']]] + ['version_5fmask_631',['version_mask',['../structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html#a83bda73c5a360f5ba8f653d0f888993b',1,'entt::entt_traits< std::uint16_t >::version_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html#a6ada978f907780643740d9ca2a8e8762',1,'entt::entt_traits< std::uint32_t >::version_mask()'],['../structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html#a3f9f70e677d638708d0ce72ce1a28c92',1,'entt::entt_traits< std::uint64_t >::version_mask()']]] ]; diff --git a/sigh_8hpp_source.html b/sigh_8hpp_source.html index abfcb995e..1a3ad28d9 100644 --- a/sigh_8hpp_source.html +++ b/sigh_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/signal/sigh.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */
    sigh.hpp
    -
    1 #ifndef ENTT_SIGNAL_SIGH_HPP
    2 #define ENTT_SIGNAL_SIGH_HPP
    3 
    4 
    5 #include <vector>
    6 #include <utility>
    7 #include <iterator>
    8 #include <algorithm>
    9 #include <functional>
    10 #include <type_traits>
    11 #include "../config/config.h"
    12 #include "delegate.hpp"
    13 #include "fwd.hpp"
    14 
    15 
    16 namespace entt {
    17 
    18 
    27 template<typename Function>
    28 class sink;
    29 
    30 
    39 template<typename Function>
    40 class sigh;
    41 
    42 
    58 template<typename Ret, typename... Args>
    59 class sigh<Ret(Args...)> {
    61  friend class sink<Ret(Args...)>;
    62 
    63 public:
    65  using size_type = std::size_t;
    67  using sink_type = entt::sink<Ret(Args...)>;
    68 
    73  template<typename Class>
    74  using instance_type = Class *;
    75 
    80  size_type size() const ENTT_NOEXCEPT {
    81  return calls.size();
    82  }
    83 
    88  bool empty() const ENTT_NOEXCEPT {
    89  return calls.empty();
    90  }
    91 
    99  void publish(Args... args) const {
    100  std::for_each(calls.cbegin(), calls.cend(), [&args...](auto &&call) {
    101  call(args...);
    102  });
    103  }
    104 
    119  template<typename Func>
    120  void collect(Func func, Args... args) const {
    121  for(auto &&call: calls) {
    122  if constexpr(std::is_void_v<Ret>) {
    123  if constexpr(std::is_invocable_r_v<bool, Func>) {
    124  call(args...);
    125  if(func()) { break; }
    126  } else {
    127  call(args...);
    128  func();
    129  }
    130  } else {
    131  if constexpr(std::is_invocable_r_v<bool, Func, Ret>) {
    132  if(func(call(args...))) { break; }
    133  } else {
    134  func(call(args...));
    135  }
    136  }
    137  }
    138  }
    139 
    140 private:
    141  std::vector<delegate<Ret(Args...)>> calls;
    142 };
    143 
    144 
    152 class connection {
    154  template<typename>
    155  friend class sink;
    156 
    157  connection(delegate<void(void *)> fn, void *ref)
    158  : disconnect{fn}, signal{ref}
    159  {}
    160 
    161 public:
    163  connection() = default;
    164 
    166  connection(const connection &) = default;
    167 
    173  : connection{}
    174  {
    175  std::swap(disconnect, other.disconnect);
    176  std::swap(signal, other.signal);
    177  }
    178 
    180  connection & operator=(const connection &) = default;
    181 
    188  if(this != &other) {
    189  auto tmp{std::move(other)};
    190  disconnect = tmp.disconnect;
    191  signal = tmp.signal;
    192  }
    193 
    194  return *this;
    195  }
    196 
    201  explicit operator bool() const ENTT_NOEXCEPT {
    202  return static_cast<bool>(disconnect);
    203  }
    204 
    206  void release() {
    207  if(disconnect) {
    208  disconnect(signal);
    209  disconnect.reset();
    210  }
    211  }
    212 
    213 private:
    214  delegate<void(void *)> disconnect;
    215  void *signal{};
    216 };
    217 
    218 
    228 struct scoped_connection: private connection {
    229  using connection::operator bool;
    230  using connection::release;
    231 
    233  scoped_connection() = default;
    234 
    240  : connection{conn}
    241  {}
    242 
    244  scoped_connection(const scoped_connection &) = delete;
    245 
    247  scoped_connection(scoped_connection &&) = default;
    248 
    252  }
    253 
    258  scoped_connection & operator=(const scoped_connection &) = delete;
    259 
    264  scoped_connection & operator=(scoped_connection &&) = default;
    265 
    272  static_cast<connection &>(*this) = other;
    273  return *this;
    274  }
    275 
    282  static_cast<connection &>(*this) = std::move(other);
    283  return *this;
    284  }
    285 };
    286 
    287 
    302 template<typename Ret, typename... Args>
    303 class sink<Ret(Args...)> {
    304  using signal_type = sigh<Ret(Args...)>;
    305  using difference_type = typename std::iterator_traits<typename decltype(signal_type::calls)::iterator>::difference_type;
    306 
    307  template<auto Candidate, typename Type>
    308  static void release(Type value_or_instance, void *signal) {
    309  sink{*static_cast<signal_type *>(signal)}.disconnect<Candidate>(value_or_instance);
    310  }
    311 
    312  template<auto Function>
    313  static void release(void *signal) {
    314  sink{*static_cast<signal_type *>(signal)}.disconnect<Function>();
    315  }
    316 
    317 public:
    322  sink(sigh<Ret(Args...)> &ref) ENTT_NOEXCEPT
    323  : offset{},
    324  signal{&ref}
    325  {}
    326 
    331  bool empty() const ENTT_NOEXCEPT {
    332  return signal->calls.empty();
    333  }
    334 
    340  template<auto Function>
    342  delegate<Ret(Args...)> call{};
    343  call.template connect<Function>();
    344 
    345  const auto &calls = signal->calls;
    346  const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call));
    347 
    348  sink other{*this};
    349  other.offset = std::distance(it, calls.cend());
    350  return other;
    351  }
    352 
    361  template<auto Candidate, typename Type>
    362  sink before(Type &value_or_instance) {
    363  delegate<Ret(Args...)> call{};
    364  call.template connect<Candidate>(value_or_instance);
    365 
    366  const auto &calls = signal->calls;
    367  const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call));
    368 
    369  sink other{*this};
    370  other.offset = std::distance(it, calls.cend());
    371  return other;
    372  }
    373 
    382  template<auto Candidate, typename Type>
    383  sink before(Type *value_or_instance) {
    384  delegate<Ret(Args...)> call{};
    385  call.template connect<Candidate>(value_or_instance);
    386 
    387  const auto &calls = signal->calls;
    388  const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call));
    389 
    390  sink other{*this};
    391  other.offset = std::distance(it, calls.cend());
    392  return other;
    393  }
    394 
    402  template<typename Type>
    403  sink before(Type &value_or_instance) {
    404  return before(&value_or_instance);
    405  }
    406 
    414  template<typename Type>
    415  sink before(Type *value_or_instance) {
    416  sink other{*this};
    417 
    418  if(value_or_instance) {
    419  const auto &calls = signal->calls;
    420  const auto it = std::find_if(calls.cbegin(), calls.cend(), [value_or_instance](const auto &delegate) {
    421  return delegate.instance() == value_or_instance;
    422  });
    423 
    424  other.offset = std::distance(it, calls.cend());
    425  }
    426 
    427  return other;
    428  }
    429 
    435  sink other{*this};
    436  other.offset = signal->calls.size();
    437  return other;
    438  }
    439 
    449  template<auto Function>
    451  disconnect<Function>();
    452 
    453  delegate<Ret(Args...)> call{};
    454  call.template connect<Function>();
    455  signal->calls.insert(signal->calls.end() - offset, std::move(call));
    456 
    457  delegate<void(void *)> conn{};
    458  conn.template connect<&release<Function>>();
    459  return { std::move(conn), signal };
    460  }
    461 
    479  template<auto Candidate, typename Type>
    480  connection connect(Type &value_or_instance) {
    481  disconnect<Candidate>(value_or_instance);
    482 
    483  delegate<Ret(Args...)> call{};
    484  call.template connect<Candidate>(value_or_instance);
    485  signal->calls.insert(signal->calls.end() - offset, std::move(call));
    486 
    487  delegate<void(void *)> conn{};
    488  conn.template connect<&release<Candidate, Type &>>(value_or_instance);
    489  return { std::move(conn), signal };
    490  }
    491 
    509  template<auto Candidate, typename Type>
    510  connection connect(Type *value_or_instance) {
    511  disconnect<Candidate>(value_or_instance);
    512 
    513  delegate<Ret(Args...)> call{};
    514  call.template connect<Candidate>(value_or_instance);
    515  signal->calls.insert(signal->calls.end() - offset, std::move(call));
    516 
    517  delegate<void(void *)> conn{};
    518  conn.template connect<&release<Candidate, Type *>>(value_or_instance);
    519  return { std::move(conn), signal };
    520  }
    521 
    526  template<auto Function>
    527  void disconnect() {
    528  auto &calls = signal->calls;
    529  delegate<Ret(Args...)> call{};
    530  call.template connect<Function>();
    531  calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end());
    532  }
    533 
    541  template<auto Candidate, typename Type>
    542  void disconnect(Type &value_or_instance) {
    543  auto &calls = signal->calls;
    544  delegate<Ret(Args...)> call{};
    545  call.template connect<Candidate>(value_or_instance);
    546  calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end());
    547  }
    548 
    556  template<auto Candidate, typename Type>
    557  void disconnect(Type *value_or_instance) {
    558  auto &calls = signal->calls;
    559  delegate<Ret(Args...)> call{};
    560  call.template connect<Candidate>(value_or_instance);
    561  calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end());
    562  }
    563 
    570  template<typename Type>
    571  void disconnect(Type &value_or_instance) {
    572  disconnect(&value_or_instance);
    573  }
    574 
    581  template<typename Type>
    582  void disconnect(Type *value_or_instance) {
    583  if(value_or_instance) {
    584  auto &calls = signal->calls;
    585  calls.erase(std::remove_if(calls.begin(), calls.end(), [value_or_instance](const auto &delegate) {
    586  return delegate.instance() == value_or_instance;
    587  }), calls.end());
    588  }
    589  }
    590 
    592  void disconnect() {
    593  signal->calls.clear();
    594  }
    595 
    596 private:
    597  difference_type offset;
    598  signal_type *signal;
    599 };
    600 
    601 
    611 template<typename Ret, typename... Args>
    612 sink(sigh<Ret(Args...)> &) ENTT_NOEXCEPT -> sink<Ret(Args...)>;
    613 
    614 
    615 }
    616 
    617 
    618 #endif // ENTT_SIGNAL_SIGH_HPP
    sink before(Type *value_or_instance)
    Returns a sink that connects before a given instance or specific payload.
    Definition: sigh.hpp:415
    -
    delegate(connect_arg_t< Function >) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>
    Deduction guide.
    -
    scoped_connection & operator=(connection &&other)
    Moves a connection.
    Definition: sigh.hpp:281
    -
    connection connect()
    Connects a free function to a signal.
    Definition: sigh.hpp:450
    -
    Scoped connection class.
    Definition: sigh.hpp:228
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    sink(sigh< Ret(Args...)> &ref) ENTT_NOEXCEPT
    Constructs a sink that is allowed to modify a given signal.
    Definition: sigh.hpp:322
    -
    sink(sigh< Ret(Args...)> &) ENTT_NOEXCEPT -> sink< Ret(Args...)>
    Deduction guide.
    -
    Connection class.
    Definition: sigh.hpp:152
    -
    Basic delegate implementation.
    Definition: delegate.hpp:86
    -
    connection & operator=(connection &&other)
    Default move assignment operator.
    Definition: sigh.hpp:187
    -
    scoped_connection & operator=(const connection &other)
    Copies a connection.
    Definition: sigh.hpp:271
    -
    void collect(Func func, Args... args) const
    Collects return values from the listeners.
    Definition: sigh.hpp:120
    -
    void disconnect()
    Disconnects all the listeners from a signal.
    Definition: sigh.hpp:592
    -
    void release()
    Breaks the connection.
    Definition: sigh.hpp:206
    -
    Unmanaged signal handler.
    Definition: sigh.hpp:59
    -
    sink before(Type *value_or_instance)
    Returns a sink that connects before a given member function or free function with payload...
    Definition: sigh.hpp:383
    -
    void disconnect(Type *value_or_instance)
    Disconnects member functions or free functions based on an instance or specific payload.
    Definition: sigh.hpp:582
    -
    connection connect(Type &value_or_instance)
    Connects a member function or a free function with payload to a signal.
    Definition: sigh.hpp:480
    -
    void publish(Args... args) const
    Triggers a signal.
    Definition: sigh.hpp:99
    -
    bool empty() const ENTT_NOEXCEPT
    Returns false if at least a listener is connected to the signal.
    Definition: sigh.hpp:88
    -
    connection(connection &&other)
    Default move constructor.
    Definition: sigh.hpp:172
    -
    scoped_connection(const connection &conn)
    Constructs a scoped connection from a basic connection.
    Definition: sigh.hpp:239
    -
    sink before()
    Returns a sink that connects before anything else.
    Definition: sigh.hpp:434
    -
    void disconnect(Type &value_or_instance)
    Disconnects member functions or free functions based on an instance or specific payload.
    Definition: sigh.hpp:571
    -
    void disconnect(Type *value_or_instance)
    Disconnects a member function or a free function with payload from a signal.
    Definition: sigh.hpp:557
    -
    Unmanaged signal handler.
    Definition: fwd.hpp:18
    -
    Class * instance_type
    Instance type when it comes to connecting member functions.
    Definition: sigh.hpp:74
    -
    ~scoped_connection()
    Automatically breaks the link on destruction.
    Definition: sigh.hpp:250
    -
    void disconnect(Type &value_or_instance)
    Disconnects a member function or a free function with payload from a signal.
    Definition: sigh.hpp:542
    -
    sink before()
    Returns a sink that connects before a given function.
    Definition: sigh.hpp:341
    -
    bool empty() const ENTT_NOEXCEPT
    Returns false if at least a listener is connected to the sink.
    Definition: sigh.hpp:331
    -
    std::size_t size_type
    Unsigned integer type.
    Definition: sigh.hpp:65
    -
    connection connect(Type *value_or_instance)
    Connects a member function or a free function with payload to a signal.
    Definition: sigh.hpp:510
    -
    sink before(Type &value_or_instance)
    Returns a sink that connects before a given instance or specific payload.
    Definition: sigh.hpp:403
    - -
    sink before(Type &value_or_instance)
    Returns a sink that connects before a given member function or free function with payload...
    Definition: sigh.hpp:362
    -
    size_type size() const ENTT_NOEXCEPT
    Number of listeners connected to the signal.
    Definition: sigh.hpp:80
    -
    void disconnect()
    Disconnects a free function from a signal.
    Definition: sigh.hpp:527
    -
    Sink class.
    Definition: fwd.hpp:14
    +
    1 #ifndef ENTT_SIGNAL_SIGH_HPP
    +
    2 #define ENTT_SIGNAL_SIGH_HPP
    +
    3 
    +
    4 
    +
    5 #include <vector>
    +
    6 #include <utility>
    +
    7 #include <iterator>
    +
    8 #include <algorithm>
    +
    9 #include <functional>
    +
    10 #include <type_traits>
    +
    11 #include "../config/config.h"
    +
    12 #include "delegate.hpp"
    +
    13 #include "fwd.hpp"
    +
    14 
    +
    15 
    +
    16 namespace entt {
    +
    17 
    +
    18 
    +
    27 template<typename Function>
    +
    28 class sink;
    +
    29 
    +
    30 
    +
    39 template<typename Function>
    +
    40 class sigh;
    +
    41 
    +
    42 
    +
    58 template<typename Ret, typename... Args>
    +
    59 class sigh<Ret(Args...)> {
    +
    61  friend class sink<Ret(Args...)>;
    +
    62 
    +
    63 public:
    +
    65  using size_type = std::size_t;
    +
    67  using sink_type = entt::sink<Ret(Args...)>;
    +
    68 
    +
    73  template<typename Class>
    +
    74  using instance_type = Class *;
    +
    75 
    +
    80  size_type size() const ENTT_NOEXCEPT {
    +
    81  return calls.size();
    +
    82  }
    +
    83 
    +
    88  bool empty() const ENTT_NOEXCEPT {
    +
    89  return calls.empty();
    +
    90  }
    +
    91 
    +
    99  void publish(Args... args) const {
    +
    100  std::for_each(calls.cbegin(), calls.cend(), [&args...](auto &&call) {
    +
    101  call(args...);
    +
    102  });
    +
    103  }
    +
    104 
    +
    119  template<typename Func>
    +
    120  void collect(Func func, Args... args) const {
    +
    121  for(auto &&call: calls) {
    +
    122  if constexpr(std::is_void_v<Ret>) {
    +
    123  if constexpr(std::is_invocable_r_v<bool, Func>) {
    +
    124  call(args...);
    +
    125  if(func()) { break; }
    +
    126  } else {
    +
    127  call(args...);
    +
    128  func();
    +
    129  }
    +
    130  } else {
    +
    131  if constexpr(std::is_invocable_r_v<bool, Func, Ret>) {
    +
    132  if(func(call(args...))) { break; }
    +
    133  } else {
    +
    134  func(call(args...));
    +
    135  }
    +
    136  }
    +
    137  }
    +
    138  }
    +
    139 
    +
    140 private:
    +
    141  std::vector<delegate<Ret(Args...)>> calls;
    +
    142 };
    +
    143 
    +
    144 
    +
    152 class connection {
    +
    154  template<typename>
    +
    155  friend class sink;
    +
    156 
    +
    157  connection(delegate<void(void *)> fn, void *ref)
    +
    158  : disconnect{fn}, signal{ref}
    +
    159  {}
    +
    160 
    +
    161 public:
    +
    163  connection() = default;
    +
    164 
    +
    166  connection(const connection &) = default;
    +
    167 
    + +
    173  : connection{}
    +
    174  {
    +
    175  std::swap(disconnect, other.disconnect);
    +
    176  std::swap(signal, other.signal);
    +
    177  }
    +
    178 
    +
    180  connection & operator=(const connection &) = default;
    +
    181 
    + +
    188  if(this != &other) {
    +
    189  auto tmp{std::move(other)};
    +
    190  disconnect = tmp.disconnect;
    +
    191  signal = tmp.signal;
    +
    192  }
    +
    193 
    +
    194  return *this;
    +
    195  }
    +
    196 
    +
    201  explicit operator bool() const ENTT_NOEXCEPT {
    +
    202  return static_cast<bool>(disconnect);
    +
    203  }
    +
    204 
    +
    206  void release() {
    +
    207  if(disconnect) {
    +
    208  disconnect(signal);
    +
    209  disconnect.reset();
    +
    210  }
    +
    211  }
    +
    212 
    +
    213 private:
    +
    214  delegate<void(void *)> disconnect;
    +
    215  void *signal{};
    +
    216 };
    +
    217 
    +
    218 
    +
    228 struct scoped_connection: private connection {
    +
    229  using connection::operator bool;
    +
    230  using connection::release;
    +
    231 
    +
    233  scoped_connection() = default;
    +
    234 
    + +
    240  : connection{conn}
    +
    241  {}
    +
    242 
    +
    244  scoped_connection(const scoped_connection &) = delete;
    +
    245 
    +
    247  scoped_connection(scoped_connection &&) = default;
    +
    248 
    + + +
    252  }
    +
    253 
    +
    258  scoped_connection & operator=(const scoped_connection &) = delete;
    +
    259 
    + +
    265 
    + +
    272  static_cast<connection &>(*this) = other;
    +
    273  return *this;
    +
    274  }
    +
    275 
    + +
    282  static_cast<connection &>(*this) = std::move(other);
    +
    283  return *this;
    +
    284  }
    +
    285 };
    +
    286 
    +
    287 
    +
    302 template<typename Ret, typename... Args>
    +
    303 class sink<Ret(Args...)> {
    +
    304  using signal_type = sigh<Ret(Args...)>;
    +
    305  using difference_type = typename std::iterator_traits<typename decltype(signal_type::calls)::iterator>::difference_type;
    +
    306 
    +
    307  template<auto Candidate, typename Type>
    +
    308  static void release(Type value_or_instance, void *signal) {
    +
    309  sink{*static_cast<signal_type *>(signal)}.disconnect<Candidate>(value_or_instance);
    +
    310  }
    +
    311 
    +
    312  template<auto Function>
    +
    313  static void release(void *signal) {
    +
    314  sink{*static_cast<signal_type *>(signal)}.disconnect<Function>();
    +
    315  }
    +
    316 
    +
    317 public:
    +
    322  sink(sigh<Ret(Args...)> &ref) ENTT_NOEXCEPT
    +
    323  : offset{},
    +
    324  signal{&ref}
    +
    325  {}
    +
    326 
    +
    331  bool empty() const ENTT_NOEXCEPT {
    +
    332  return signal->calls.empty();
    +
    333  }
    +
    334 
    +
    340  template<auto Function>
    + +
    342  delegate<Ret(Args...)> call{};
    +
    343  call.template connect<Function>();
    +
    344 
    +
    345  const auto &calls = signal->calls;
    +
    346  const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call));
    +
    347 
    +
    348  sink other{*this};
    +
    349  other.offset = std::distance(it, calls.cend());
    +
    350  return other;
    +
    351  }
    +
    352 
    +
    361  template<auto Candidate, typename Type>
    +
    362  sink before(Type &value_or_instance) {
    +
    363  delegate<Ret(Args...)> call{};
    +
    364  call.template connect<Candidate>(value_or_instance);
    +
    365 
    +
    366  const auto &calls = signal->calls;
    +
    367  const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call));
    +
    368 
    +
    369  sink other{*this};
    +
    370  other.offset = std::distance(it, calls.cend());
    +
    371  return other;
    +
    372  }
    +
    373 
    +
    382  template<auto Candidate, typename Type>
    +
    383  sink before(Type *value_or_instance) {
    +
    384  delegate<Ret(Args...)> call{};
    +
    385  call.template connect<Candidate>(value_or_instance);
    +
    386 
    +
    387  const auto &calls = signal->calls;
    +
    388  const auto it = std::find(calls.cbegin(), calls.cend(), std::move(call));
    +
    389 
    +
    390  sink other{*this};
    +
    391  other.offset = std::distance(it, calls.cend());
    +
    392  return other;
    +
    393  }
    +
    394 
    +
    402  template<typename Type>
    +
    403  sink before(Type &value_or_instance) {
    +
    404  return before(&value_or_instance);
    +
    405  }
    +
    406 
    +
    414  template<typename Type>
    +
    415  sink before(Type *value_or_instance) {
    +
    416  sink other{*this};
    +
    417 
    +
    418  if(value_or_instance) {
    +
    419  const auto &calls = signal->calls;
    +
    420  const auto it = std::find_if(calls.cbegin(), calls.cend(), [value_or_instance](const auto &delegate) {
    +
    421  return delegate.instance() == value_or_instance;
    +
    422  });
    +
    423 
    +
    424  other.offset = std::distance(it, calls.cend());
    +
    425  }
    +
    426 
    +
    427  return other;
    +
    428  }
    +
    429 
    + +
    435  sink other{*this};
    +
    436  other.offset = signal->calls.size();
    +
    437  return other;
    +
    438  }
    +
    439 
    +
    449  template<auto Function>
    + +
    451  disconnect<Function>();
    +
    452 
    +
    453  delegate<Ret(Args...)> call{};
    +
    454  call.template connect<Function>();
    +
    455  signal->calls.insert(signal->calls.end() - offset, std::move(call));
    +
    456 
    +
    457  delegate<void(void *)> conn{};
    +
    458  conn.template connect<&release<Function>>();
    +
    459  return { std::move(conn), signal };
    +
    460  }
    +
    461 
    +
    479  template<auto Candidate, typename Type>
    +
    480  connection connect(Type &value_or_instance) {
    +
    481  disconnect<Candidate>(value_or_instance);
    +
    482 
    +
    483  delegate<Ret(Args...)> call{};
    +
    484  call.template connect<Candidate>(value_or_instance);
    +
    485  signal->calls.insert(signal->calls.end() - offset, std::move(call));
    +
    486 
    +
    487  delegate<void(void *)> conn{};
    +
    488  conn.template connect<&release<Candidate, Type &>>(value_or_instance);
    +
    489  return { std::move(conn), signal };
    +
    490  }
    +
    491 
    +
    509  template<auto Candidate, typename Type>
    +
    510  connection connect(Type *value_or_instance) {
    +
    511  disconnect<Candidate>(value_or_instance);
    +
    512 
    +
    513  delegate<Ret(Args...)> call{};
    +
    514  call.template connect<Candidate>(value_or_instance);
    +
    515  signal->calls.insert(signal->calls.end() - offset, std::move(call));
    +
    516 
    +
    517  delegate<void(void *)> conn{};
    +
    518  conn.template connect<&release<Candidate, Type *>>(value_or_instance);
    +
    519  return { std::move(conn), signal };
    +
    520  }
    +
    521 
    +
    526  template<auto Function>
    +
    527  void disconnect() {
    +
    528  auto &calls = signal->calls;
    +
    529  delegate<Ret(Args...)> call{};
    +
    530  call.template connect<Function>();
    +
    531  calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end());
    +
    532  }
    +
    533 
    +
    541  template<auto Candidate, typename Type>
    +
    542  void disconnect(Type &value_or_instance) {
    +
    543  auto &calls = signal->calls;
    +
    544  delegate<Ret(Args...)> call{};
    +
    545  call.template connect<Candidate>(value_or_instance);
    +
    546  calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end());
    +
    547  }
    +
    548 
    +
    556  template<auto Candidate, typename Type>
    +
    557  void disconnect(Type *value_or_instance) {
    +
    558  auto &calls = signal->calls;
    +
    559  delegate<Ret(Args...)> call{};
    +
    560  call.template connect<Candidate>(value_or_instance);
    +
    561  calls.erase(std::remove(calls.begin(), calls.end(), std::move(call)), calls.end());
    +
    562  }
    +
    563 
    +
    570  template<typename Type>
    +
    571  void disconnect(Type &value_or_instance) {
    +
    572  disconnect(&value_or_instance);
    +
    573  }
    +
    574 
    +
    581  template<typename Type>
    +
    582  void disconnect(Type *value_or_instance) {
    +
    583  if(value_or_instance) {
    +
    584  auto &calls = signal->calls;
    +
    585  calls.erase(std::remove_if(calls.begin(), calls.end(), [value_or_instance](const auto &delegate) {
    +
    586  return delegate.instance() == value_or_instance;
    +
    587  }), calls.end());
    +
    588  }
    +
    589  }
    +
    590 
    +
    592  void disconnect() {
    +
    593  signal->calls.clear();
    +
    594  }
    +
    595 
    +
    596 private:
    +
    597  difference_type offset;
    +
    598  signal_type *signal;
    +
    599 };
    +
    600 
    +
    601 
    +
    611 template<typename Ret, typename... Args>
    +
    612 sink(sigh<Ret(Args...)> &) ENTT_NOEXCEPT -> sink<Ret(Args...)>;
    +
    613 
    +
    614 
    +
    615 }
    +
    616 
    +
    617 
    +
    618 #endif // ENTT_SIGNAL_SIGH_HPP
    +
    void disconnect()
    Disconnects all the listeners from a signal.
    Definition: sigh.hpp:592
    +
    sink before()
    Returns a sink that connects before anything else.
    Definition: sigh.hpp:434
    +
    sink before(Type *value_or_instance)
    Returns a sink that connects before a given member function or free function with payload.
    Definition: sigh.hpp:383
    +
    void disconnect(Type &value_or_instance)
    Disconnects a member function or a free function with payload from a signal.
    Definition: sigh.hpp:542
    +
    void release()
    Breaks the connection.
    Definition: sigh.hpp:206
    +
    void disconnect(Type *value_or_instance)
    Disconnects a member function or a free function with payload from a signal.
    Definition: sigh.hpp:557
    +
    Unmanaged signal handler.
    Definition: fwd.hpp:18
    +
    ~scoped_connection()
    Automatically breaks the link on destruction.
    Definition: sigh.hpp:250
    +
    connection & operator=(connection &&other)
    Default move assignment operator.
    Definition: sigh.hpp:187
    +
    scoped_connection & operator=(connection &&other)
    Moves a connection.
    Definition: sigh.hpp:281
    +
    void publish(Args... args) const
    Triggers a signal.
    Definition: sigh.hpp:99
    +
    void disconnect(Type &value_or_instance)
    Disconnects member functions or free functions based on an instance or specific payload.
    Definition: sigh.hpp:571
    +
    connection connect(Type &value_or_instance)
    Connects a member function or a free function with payload to a signal.
    Definition: sigh.hpp:480
    +
    Unmanaged signal handler.
    Definition: sigh.hpp:59
    +
    delegate(connect_arg_t< Function >) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>
    Deduction guide.
    +
    sink before(Type &value_or_instance)
    Returns a sink that connects before a given instance or specific payload.
    Definition: sigh.hpp:403
    +
    void collect(Func func, Args... args) const
    Collects return values from the listeners.
    Definition: sigh.hpp:120
    +
    connection connect()
    Connects a free function to a signal.
    Definition: sigh.hpp:450
    +
    connection()=default
    Default constructor.
    +
    scoped_connection & operator=(const scoped_connection &)=delete
    Default copy assignment operator, deleted on purpose.
    +
    sink before()
    Returns a sink that connects before a given function.
    Definition: sigh.hpp:341
    +
    std::size_t size_type
    Unsigned integer type.
    Definition: sigh.hpp:65
    +
    scoped_connection(const connection &conn)
    Constructs a scoped connection from a basic connection.
    Definition: sigh.hpp:239
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    sink(sigh< Ret(Args...)> &ref) ENTT_NOEXCEPT
    Constructs a sink that is allowed to modify a given signal.
    Definition: sigh.hpp:322
    +
    sink(sigh< Ret(Args...)> &) ENTT_NOEXCEPT -> sink< Ret(Args...)>
    Deduction guide.
    +
    scoped_connection & operator=(const connection &other)
    Copies a connection.
    Definition: sigh.hpp:271
    +
    Sink class.
    Definition: sigh.hpp:303
    +
    sink before(Type &value_or_instance)
    Returns a sink that connects before a given member function or free function with payload.
    Definition: sigh.hpp:362
    +
    connection(connection &&other)
    Default move constructor.
    Definition: sigh.hpp:172
    +
    sink before(Type *value_or_instance)
    Returns a sink that connects before a given instance or specific payload.
    Definition: sigh.hpp:415
    +
    bool empty() const ENTT_NOEXCEPT
    Returns false if at least a listener is connected to the signal.
    Definition: sigh.hpp:88
    +
    void disconnect()
    Disconnects a free function from a signal.
    Definition: sigh.hpp:527
    +
    Sink class.
    Definition: fwd.hpp:14
    +
    bool empty() const ENTT_NOEXCEPT
    Returns false if at least a listener is connected to the sink.
    Definition: sigh.hpp:331
    +
    size_type size() const ENTT_NOEXCEPT
    Number of listeners connected to the signal.
    Definition: sigh.hpp:80
    +
    Connection class.
    Definition: sigh.hpp:152
    +
    connection connect(Type *value_or_instance)
    Connects a member function or a free function with payload to a signal.
    Definition: sigh.hpp:510
    +
    Scoped connection class.
    Definition: sigh.hpp:228
    +
    void disconnect(Type *value_or_instance)
    Disconnects member functions or free functions based on an instance or specific payload.
    Definition: sigh.hpp:582
    +
    Basic delegate implementation.
    Definition: delegate.hpp:86
    +
    scoped_connection()=default
    Default constructor.
    +
    Class * instance_type
    Instance type when it comes to connecting member functions.
    Definition: sigh.hpp:74
    +
    connection & operator=(const connection &)=default
    Default copy assignment operator.
    diff --git a/signal_2fwd_8hpp_source.html b/signal_2fwd_8hpp_source.html index 38317ce3d..03b089cfb 100644 --- a/signal_2fwd_8hpp_source.html +++ b/signal_2fwd_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/signal/fwd.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    fwd.hpp
    -
    1 #ifndef ENTT_SIGNAL_FWD_HPP
    2 #define ENTT_SIGNAL_FWD_HPP
    3 
    4 
    5 namespace entt {
    6 
    7 
    9 template<typename>
    10 class delegate;
    11 
    13 template<typename>
    14 class sink;
    15 
    17 template<typename>
    18 class sigh;
    19 
    20 
    21 }
    22 
    23 
    24 #endif // ENTT_SIGNAL_FWD_HPP
    delegate(connect_arg_t< Function >) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>
    Deduction guide.
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    Unmanaged signal handler.
    Definition: fwd.hpp:18
    -
    Sink class.
    Definition: fwd.hpp:14
    +
    1 #ifndef ENTT_SIGNAL_FWD_HPP
    +
    2 #define ENTT_SIGNAL_FWD_HPP
    +
    3 
    +
    4 
    +
    5 namespace entt {
    +
    6 
    +
    7 
    +
    9 template<typename>
    +
    10 class delegate;
    +
    11 
    +
    13 template<typename>
    +
    14 class sink;
    +
    15 
    +
    17 template<typename>
    +
    18 class sigh;
    +
    19 
    +
    20 
    +
    21 }
    +
    22 
    +
    23 
    +
    24 #endif // ENTT_SIGNAL_FWD_HPP
    +
    Unmanaged signal handler.
    Definition: fwd.hpp:18
    +
    delegate(connect_arg_t< Function >) ENTT_NOEXCEPT -> delegate< std::remove_pointer_t< internal::to_function_pointer_t< decltype(Function)>>>
    Deduction guide.
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    Sink class.
    Definition: fwd.hpp:14
    diff --git a/signal_8md_source.html b/signal_8md_source.html deleted file mode 100644 index 76b23fa3e..000000000 --- a/signal_8md_source.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - -EnTT: docs/md/signal.md Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    EnTT -  3.2.1 -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    docs/md/signal.md
    -
    -
    -
    1 # Crash Course: events, signals and everything in between
    2 
    3 <!--
    4 @cond TURN_OFF_DOXYGEN
    5 -->
    6 # Table of Contents
    7 
    8 * [Introduction](#introduction)
    9 * [Delegate](#delegate)
    10 * [Signals](#signals)
    11 * [Event dispatcher](#event-dispatcher)
    12 * [Event emitter](#event-emitter)
    13 <!--
    14 @endcond TURN_OFF_DOXYGEN
    15 -->
    16 
    17 # Introduction
    18 
    19 Signals are usually a core part of games and software architectures in
    20 general.<br/>
    21 Roughly speaking, they help to decouple the various parts of a system while
    22 allowing them to communicate with each other somehow.
    23 
    24 The so called _modern C++_ comes with a tool that can be useful in these terms,
    25 the `std::function`. As an example, it can be used to create delegates.<br/>
    26 However, there is no guarantee that an `std::function` does not perform
    27 allocations under the hood and this could be problematic sometimes. Furthermore,
    28 it solves a problem but may not adapt well to other requirements that may arise
    29 from time to time.
    30 
    31 In case that the flexibility and power of an `std::function` isn't required or
    32 if the price to pay for them is too high,` EnTT` offers a complete set of
    33 lightweight classes to solve the same and many other problems.
    34 
    35 # Delegate
    36 
    37 A delegate can be used as a general purpose invoker with no memory overhead for
    38 free functions and members provided along with an instance on which to invoke
    39 them.<br/>
    40 It does not claim to be a drop-in replacement for an `std::function`, so do not
    41 expect to use it whenever an `std::function` fits well. That said, it's most
    42 likely even a better fit than an `std::function` in a lot of cases, so expect to
    43 use it quite a lot anyway.
    44 
    45 The interface is trivial. It offers a default constructor to create empty
    46 delegates:
    47 
    48 ```cpp
    49 entt::delegate<int(int)> delegate{};
    50 ```
    51 
    52 All what is needed to create an instance is to specify the type of the function
    53 the delegate will _contain_, that is the signature of the free function or the
    54 member one wants to assign to it.
    55 
    56 Attempting to use an empty delegate by invoking its function call operator
    57 results in undefined behavior or most likely a crash. Before to use a delegate,
    58 it must be initialized.<br/>
    59 There exists a bunch of overloads of the `connect` member function to do that.
    60 As an example of use:
    61 
    62 ```cpp
    63 int f(int i) { return i; }
    64 
    65 struct my_struct {
    66  int f(const int &i) { return i }
    67 };
    68 
    69 // bind a free function to the delegate
    70 delegate.connect<&f>();
    71 
    72 // bind a member function to the delegate
    73 my_struct instance;
    74 delegate.connect<&my_struct::f>(instance);
    75 ```
    76 
    77 The delegate class accepts also data members, if needed. In this case, the
    78 function type of the delegate is such that the parameter list is empty and the
    79 value of the data member is at least convertible to the return type.
    80 
    81 Free functions having type equivalent to `void(T &, args...)` are accepted as
    82 well. In this case, `T &` is considered a payload and the function will receive
    83 it back every time it's invoked. In other terms, this works just fine with the
    84 above definition:
    85 
    86 ```cpp
    87 void g(const char &c, int i) { /* ... */ }
    88 const char c = 'c';
    89 
    90 delegate.connect<&g>(c);
    91 delegate(42);
    92 ```
    93 
    94 The function `g` will be invoked with a reference to `c` and `42`. However, the
    95 function type of the delegate is still `void(int)`. This is also the signature
    96 of its function call operator.
    97 
    98 Another interesting aspect of the delegate class is that it accepts also
    99 functions with a list of parameters that is shorter than that of the function
    100 type used to specialize the delegate itself.<br/>
    101 The following code is therefore perfectly valid:
    102 
    103 ```cpp
    104 void g() { /* ... */ }
    105 delegate.connect<&g>();
    106 delegate(42);
    107 ```
    108 
    109 Where the function type of the delegate is `void(int)` as above. It goes without
    110 saying that the extra arguments are silently discarded internally.<br/>v
    111 This is a nice-to-have feature in a lot of cases, as an example when the
    112 `delegate` class is used as a building block of a signal-slot system.
    113 
    114 To create and initialize a delegate at once, there are a few specialized
    115 constructors. Because of the rules of the language, the listener is provided by
    116 means of the `entt::connect_arg` variable template:
    117 
    118 ```cpp
    119 entt::delegate<int(int)> func{entt::connect_arg<&f>};
    120 ```
    121 
    122 Aside `connect`, a `disconnect` counterpart isn't provided. Instead, there
    123 exists a `reset` member function to use to clear a delegate.<br/>
    124 To know if a delegate is empty, it can be used explicitly in every conditional
    125 statement:
    126 
    127 ```cpp
    128 if(delegate) {
    129  // ...
    130 }
    131 ```
    132 
    133 Finally, to invoke a delegate, the function call operator is the way to go as
    134 already shown in the examples above:
    135 
    136 ```cpp
    137 auto ret = delegate(42);
    138 ```
    139 
    140 In all cases, the listeners don't have to strictly follow the signature of the
    141 delegate. As long as a listener can be invoked with the given arguments to yield
    142 a result that is convertible to the given result type, everything works just
    143 fine.
    144 
    145 # Signals
    146 
    147 Signal handlers work with references to classes, function pointers and pointers
    148 to members. Listeners can be any kind of objects and users are in charge of
    149 connecting and disconnecting them from a signal to avoid crashes due to
    150 different lifetimes. On the other side, performance shouldn't be affected that
    151 much by the presence of such a signal handler.<br/>
    152 Signals make use of delegates internally and therefore they undergo the same
    153 rules and offer similar functionalities. It may be a good idea to consult the
    154 documentation of the `delegate` class for further information.
    155 
    156 A signal handler can be used as a private data member without exposing any
    157 _publish_ functionality to the clients of a class. The basic idea is to impose a
    158 clear separation between the signal itself and the `sink` class, that is a tool
    159 to be used to connect and disconnect listeners on the fly.
    160 
    161 The API of a signal handler is straightforward. If a collector is supplied to
    162 the signal when something is published, all the values returned by the listeners
    163 can be literally _collected_ and used later by the caller. Otherwise, the class
    164 works just like a plain signal that emits events from time to time.<br/>
    165 To create instances of signal handlers it is sufficient to provide the type of
    166 function to which they refer:
    167 
    168 ```cpp
    169 entt::sigh<void(int, char)> signal;
    170 ```
    171 
    172 Signals offer all the basic functionalities required to know how many listeners
    173 they contain (`size`) or if they contain at least a listener (`empty`), as well
    174 as a function to use to swap handlers (`swap`).
    175 
    176 Besides them, there are member functions to use both to connect and disconnect
    177 listeners in all their forms by means of a sink:
    178 
    179 ```cpp
    180 void foo(int, char) { /* ... */ }
    181 
    182 struct listener {
    183  void bar(const int &, char) { /* ... */ }
    184 };
    185 
    186 // ...
    187 
    188 entt::sink sink{signal};
    189 listener instance;
    190 
    191 sink.connect<&foo>();
    192 sink.connect<&listener::bar>(instance);
    193 
    194 // ...
    195 
    196 // disconnects a free function
    197 sink.disconnect<&foo>();
    198 
    199 // disconnect a member function of an instance
    200 sink.disconnect<&listener::bar>(instance);
    201 
    202 // disconnect all the member functions of an instance, if any
    203 sink.disconnect(instance);
    204 
    205 // discards all the listeners at once
    206 sink.disconnect();
    207 ```
    208 
    209 As shown above, the listeners don't have to strictly follow the signature of the
    210 signal. As long as a listener can be invoked with the given arguments to yield a
    211 result that is convertible to the given return type, everything works just
    212 fine.<br/>
    213 It's also possible to connect a listener before other listeners already
    214 contained by the signal. The `before` function returns a `sink` object correctly
    215 initialized for the purpose that can be used to connect one or more listeners in
    216 order and in the desired position:
    217 
    218 ```cpp
    219 sink.before<&foo>().connect<&listener::bar>(instance);
    220 ```
    221 
    222 In all cases, the `connect` member function returns by default a `connection`
    223 object to be used as an alternative to break a connection by means of its
    224 `release` member function. A `scoped_connection` can also be created from a
    225 connection. In this case, the link is broken automatically as soon as the object
    226 goes out of scope.
    227 
    228 Once listeners are attached (or even if there are no listeners at all), events
    229 and data in general can be published through a signal by means of the `publish`
    230 member function:
    231 
    232 ```cpp
    233 signal.publish(42, 'c');
    234 ```
    235 
    236 To collect data, the `collect` member function should be used instead. Below is
    237 a minimal example to show how to use it:
    238 
    239 ```cpp
    240 int f() { return 0; }
    241 int g() { return 1; }
    242 
    243 // ...
    244 
    245 entt::sigh<int()> signal;
    246 entt::sink sink{signal};
    247 
    248 sink.connect<&f>();
    249 sink.connect<&g>();
    250 
    251 std::vector<int> vec{};
    252 signal.collect([&vec](int value) { vec.push_back(value); });
    253 
    254 assert(vec[0] == 0);
    255 assert(vec[1] == 1);
    256 ```
    257 
    258 A collector must expose a function operator that accepts as an argument a type
    259 to which the return type of the listeners can be converted. Moreover, it can
    260 optionally return a boolean value that is true to stop collecting data, false
    261 otherwise. This way one can avoid calling all the listeners in case it isn't
    262 necessary.<br/>
    263 Functors can also be used in place of a lambda. Since the collector is copied
    264 when invoking the `collect` member function, `std::ref` is the way to go in this
    265 case:
    266 
    267 ```cpp
    268 struct my_collector {
    269  std::vector<int> vec{};
    270 
    271  bool operator()(int v) noexcept {
    272  vec.push_back(v);
    273  return true;
    274  }
    275 };
    276 
    277 // ...
    278 
    279 my_collector collector;
    280 signal.collect(std::ref(collector));
    281 ```
    282 
    283 # Event dispatcher
    284 
    285 The event dispatcher class is designed so as to be used in a loop. It allows
    286 users both to trigger immediate events or to queue events to be published all
    287 together once per tick.<br/>
    288 This class shares part of its API with the one of the signal handler, but it
    289 doesn't require that all the types of events are specified when declared:
    290 
    291 ```cpp
    292 // define a general purpose dispatcher
    293 entt::dispatcher dispatcher{};
    294 ```
    295 
    296 In order to register an instance of a class to a dispatcher, its type must
    297 expose one or more member functions the arguments of which are such that
    298 `const E &` can be converted to them for each type of event `E`, no matter what
    299 the return value is.<br/>
    300 The name of the member function aimed to receive the event must be provided to
    301 the `connect` member function of the sink in charge for the specific event:
    302 
    303 ```cpp
    304 struct an_event { int value; };
    305 struct another_event {};
    306 
    307 struct listener {
    308  void receive(const an_event &) { /* ... */ }
    309  void method(const another_event &) { /* ... */ }
    310 };
    311 
    312 // ...
    313 
    314 listener listener;
    315 dispatcher.sink<an_event>().connect<&listener::receive>(listener);
    316 dispatcher.sink<another_event>().connect<&listener::method>(listener);
    317 ```
    318 
    319 The `disconnect` member function follows the same pattern and can be used to
    320 remove one listener at a time or all of them at once:
    321 
    322 ```cpp
    323 dispatcher.sink<an_event>().disconnect<&listener::receive>(listener);
    324 dispatcher.sink<another_event>().disconnect(listener);
    325 ```
    326 
    327 The `trigger` member function serves the purpose of sending an immediate event
    328 to all the listeners registered so far. It offers a convenient approach that
    329 relieves users from having to create the event itself. Instead, it's enough to
    330 specify the type of event and provide all the parameters required to construct
    331 it.<br/>
    332 As an example:
    333 
    334 ```cpp
    335 dispatcher.trigger<an_event>(42);
    336 dispatcher.trigger<another_event>();
    337 ```
    338 
    339 Listeners are invoked immediately, order of execution isn't guaranteed. This
    340 method can be used to push around urgent messages like an _is terminating_
    341 notification on a mobile app.
    342 
    343 On the other hand, the `enqueue` member function queues messages together and
    344 allows to maintain control over the moment they are sent to listeners. The
    345 signature of this method is more or less the same of `trigger`:
    346 
    347 ```cpp
    348 dispatcher.enqueue<an_event>(42);
    349 dispatcher.enqueue<another_event>();
    350 ```
    351 
    352 Events are stored aside until the `update` member function is invoked, then all
    353 the messages that are still pending are sent to the listeners at once:
    354 
    355 ```cpp
    356 // emits all the events of the given type at once
    357 dispatcher.update<my_event>();
    358 
    359 // emits all the events queued so far at once
    360 dispatcher.update();
    361 ```
    362 
    363 This way users can embed the dispatcher in a loop and literally dispatch events
    364 once per tick to their systems.
    365 
    366 # Event emitter
    367 
    368 A general purpose event emitter thought mainly for those cases where it comes to
    369 working with asynchronous stuff.<br/>
    370 Originally designed to fit the requirements of
    371 [`uvw`](https://github.com/skypjack/uvw) (a wrapper for `libuv` written in
    372 modern C++), it was adapted later to be included in this library.
    373 
    374 To create a custom emitter type, derived classes must inherit directly from the
    375 base class as:
    376 
    377 ```cpp
    378 struct my_emitter: emitter<my_emitter> {
    379  // ...
    380 }
    381 ```
    382 
    383 The full list of accepted types of events isn't required. Handlers are created
    384 internally on the fly and thus each type of event is accepted by default.
    385 
    386 Whenever an event is published, an emitter provides the listeners with a
    387 reference to itself along with a const reference to the event. Therefore
    388 listeners have an handy way to work with it without incurring in the need of
    389 capturing a reference to the emitter itself.<br/>
    390 In addition, an opaque object is returned each time a connection is established
    391 between an emitter and a listener, allowing the caller to disconnect them at a
    392 later time.<br/>
    393 The opaque object used to handle connections is both movable and copyable. On
    394 the other side, an event emitter is movable but not copyable by default.
    395 
    396 To create new instances of an emitter, no arguments are required:
    397 
    398 ```cpp
    399 my_emitter emitter{};
    400 ```
    401 
    402 Listeners must be movable and callable objects (free functions, lambdas,
    403 functors, `std::function`s, whatever) whose function type is:
    404 
    405 ```cpp
    406 void(const Event &, my_emitter &)
    407 ```
    408 
    409 Where `Event` is the type of event they want to listen.<br/>
    410 There are two ways to attach a listener to an event emitter that differ
    411 slightly from each other:
    412 
    413 * To register a long-lived listener, use the `on` member function. It is meant
    414  to register a listener designed to be invoked more than once for the given
    415  event type.<br/>
    416  As an example:
    417 
    418  ```cpp
    419  auto conn = emitter.on<my_event>([](const my_event &event, my_emitter &emitter) {
    420  // ...
    421  });
    422  ```
    423 
    424  The connection object can be freely discarded. Otherwise, it can be used later
    425  to disconnect the listener if required.
    426 
    427 * To register a short-lived listener, use the `once` member function. It is
    428  meant to register a listener designed to be invoked only once for the given
    429  event type. The listener is automatically disconnected after the first
    430  invocation.<br/>
    431  As an example:
    432 
    433  ```cpp
    434  auto conn = emitter.once<my_event>([](const my_event &event, my_emitter &emitter) {
    435  // ...
    436  });
    437  ```
    438 
    439  The connection object can be freely discarded. Otherwise, it can be used later
    440  to disconnect the listener if required.
    441 
    442 In both cases, the connection object can be used with the `erase` member
    443 function:
    444 
    445 ```cpp
    446 emitter.erase(conn);
    447 ```
    448 
    449 There are also two member functions to use either to disconnect all the
    450 listeners for a given type of event or to clear the emitter:
    451 
    452 ```cpp
    453 // removes all the listener for the specific event
    454 emitter.clear<my_event>();
    455 
    456 // removes all the listeners registered so far
    457 emitter.clear();
    458 ```
    459 
    460 To send an event to all the listeners that are interested in it, the `publish`
    461 member function offers a convenient approach that relieves users from having to
    462 create the event:
    463 
    464 ```cpp
    465 struct my_event { int i; };
    466 
    467 // ...
    468 
    469 emitter.publish<my_event>(42);
    470 ```
    471 
    472 Finally, the `empty` member function tests if there exists at least either a
    473 listener registered with the event emitter or to a given type of event:
    474 
    475 ```cpp
    476 bool empty;
    477 
    478 // checks if there is any listener registered for the specific event
    479 empty = emitter.empty<my_event>();
    480 
    481 // checks it there are listeners registered with the event emitter
    482 empty = emitter.empty();
    483 ```
    484 
    485 In general, the event emitter is a handy tool when the derived classes _wrap_
    486 asynchronous operations, because it introduces a _nice-to-have_ model based on
    487 events and listeners that kindly hides the complexity behind the scenes. However
    488 it is not limited to such uses.
    - - - - diff --git a/snapshot_8hpp_source.html b/snapshot_8hpp_source.html index 45a0f5e18..bfe65412e 100644 --- a/snapshot_8hpp_source.html +++ b/snapshot_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/entity/snapshot.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    snapshot.hpp
    -
    1 #ifndef ENTT_ENTITY_SNAPSHOT_HPP
    2 #define ENTT_ENTITY_SNAPSHOT_HPP
    3 
    4 
    5 #include <array>
    6 #include <cstddef>
    7 #include <utility>
    8 #include <iterator>
    9 #include <type_traits>
    10 #include <unordered_map>
    11 #include "../config/config.h"
    12 #include "entity.hpp"
    13 #include "fwd.hpp"
    14 
    15 
    16 namespace entt {
    17 
    18 
    29 template<typename Entity>
    30 class basic_snapshot {
    32  friend class basic_registry<Entity>;
    33 
    34  using follow_fn_type = Entity(const basic_registry<Entity> &, const Entity);
    36 
    37  basic_snapshot(const basic_registry<Entity> *source, Entity init, follow_fn_type *fn) ENTT_NOEXCEPT
    38  : reg{source},
    39  seed{init},
    40  follow{fn}
    41  {}
    42 
    43  template<typename Component, typename Archive, typename It>
    44  void get(Archive &archive, std::size_t sz, It first, It last) const {
    45  archive(typename traits_type::entity_type(sz));
    46 
    47  while(first != last) {
    48  const auto entt = *(first++);
    49 
    50  if(reg->template has<Component>(entt)) {
    51  if constexpr(std::is_empty_v<Component>) {
    52  archive(entt);
    53  } else {
    54  archive(entt, reg->template get<Component>(entt));
    55  }
    56  }
    57  }
    58  }
    59 
    60  template<typename... Component, typename Archive, typename It, std::size_t... Indexes>
    61  void component(Archive &archive, It first, It last, std::index_sequence<Indexes...>) const {
    62  std::array<std::size_t, sizeof...(Indexes)> size{};
    63  auto begin = first;
    64 
    65  while(begin != last) {
    66  const auto entt = *(begin++);
    67  ((reg->template has<Component>(entt) ? ++size[Indexes] : size[Indexes]), ...);
    68  }
    69 
    70  (get<Component>(archive, size[Indexes], first, last), ...);
    71  }
    72 
    73 public:
    75  basic_snapshot(basic_snapshot &&) = default;
    76 
    78  basic_snapshot & operator=(basic_snapshot &&) = default;
    79 
    90  template<typename Archive>
    91  const basic_snapshot & entities(Archive &archive) const {
    92  archive(typename traits_type::entity_type(reg->alive()));
    93  reg->each([&archive](const auto entt) { archive(entt); });
    94  return *this;
    95  }
    96 
    107  template<typename Archive>
    108  const basic_snapshot & destroyed(Archive &archive) const {
    109  auto size = reg->size() - reg->alive();
    110  archive(typename traits_type::entity_type(size));
    111 
    112  if(size) {
    113  auto curr = seed;
    114  archive(curr);
    115 
    116  for(--size; size; --size) {
    117  curr = follow(*reg, curr);
    118  archive(curr);
    119  }
    120  }
    121 
    122  return *this;
    123  }
    124 
    136  template<typename... Component, typename Archive>
    137  const basic_snapshot & component(Archive &archive) const {
    138  (component<Component>(archive, reg->template data<Component>(), reg->template data<Component>() + reg->template size<Component>()), ...);
    139  return *this;
    140  }
    141 
    156  template<typename... Component, typename Archive, typename It>
    157  const basic_snapshot & component(Archive &archive, It first, It last) const {
    158  component<Component...>(archive, first, last, std::index_sequence_for<Component...>{});
    159  return *this;
    160  }
    161 
    162 private:
    163  const basic_registry<Entity> *reg;
    164  const Entity seed;
    165  follow_fn_type *follow;
    166 };
    167 
    168 
    179 template<typename Entity>
    180 class basic_snapshot_loader {
    182  friend class basic_registry<Entity>;
    183 
    184  using force_fn_type = void(basic_registry<Entity> &, const Entity, const bool);
    186 
    187  basic_snapshot_loader(basic_registry<Entity> *source, force_fn_type *fn) ENTT_NOEXCEPT
    188  : reg{source},
    189  force{fn}
    190  {
    191  // to restore a snapshot as a whole requires a clean registry
    192  ENTT_ASSERT(reg->empty());
    193  }
    194 
    195  template<typename Archive>
    196  void assure(Archive &archive, bool discard) const {
    197  typename traits_type::entity_type length{};
    198  archive(length);
    199 
    200  while(length--) {
    201  Entity entt{};
    202  archive(entt);
    203  force(*reg, entt, discard);
    204  }
    205  }
    206 
    207  template<typename Type, typename Archive, typename... Args>
    208  void assign(Archive &archive, Args... args) const {
    209  typename traits_type::entity_type length{};
    210  archive(length);
    211 
    212  while(length--) {
    213  static constexpr auto discard = false;
    214  Entity entt{};
    215 
    216  if constexpr(std::is_empty_v<Type>) {
    217  archive(entt);
    218  force(*reg, entt, discard);
    219  reg->template assign<Type>(args..., entt);
    220  } else {
    221  Type instance{};
    222  archive(entt, instance);
    223  force(*reg, entt, discard);
    224  reg->template assign<Type>(args..., entt, std::as_const(instance));
    225  }
    226  }
    227  }
    228 
    229 public:
    232 
    235 
    246  template<typename Archive>
    247  const basic_snapshot_loader & entities(Archive &archive) const {
    248  static constexpr auto discard = false;
    249  assure(archive, discard);
    250  return *this;
    251  }
    252 
    263  template<typename Archive>
    264  const basic_snapshot_loader & destroyed(Archive &archive) const {
    265  static constexpr auto discard = true;
    266  assure(archive, discard);
    267  return *this;
    268  }
    269 
    283  template<typename... Component, typename Archive>
    284  const basic_snapshot_loader & component(Archive &archive) const {
    285  (assign<Component>(archive), ...);
    286  return *this;
    287  }
    288 
    299  const basic_snapshot_loader & orphans() const {
    300  reg->orphans([this](const auto entt) {
    301  reg->destroy(entt);
    302  });
    303 
    304  return *this;
    305  }
    306 
    307 private:
    309  force_fn_type *force;
    310 };
    311 
    312 
    329 template<typename Entity>
    332 
    333  void destroy(Entity entt) {
    334  const auto it = remloc.find(entt);
    335 
    336  if(it == remloc.cend()) {
    337  const auto local = reg->create();
    338  remloc.emplace(entt, std::make_pair(local, true));
    339  reg->destroy(local);
    340  }
    341  }
    342 
    343  void restore(Entity entt) {
    344  const auto it = remloc.find(entt);
    345 
    346  if(it == remloc.cend()) {
    347  const auto local = reg->create();
    348  remloc.emplace(entt, std::make_pair(local, true));
    349  } else {
    350  remloc[entt].first = reg->valid(remloc[entt].first) ? remloc[entt].first : reg->create();
    351  // set the dirty flag
    352  remloc[entt].second = true;
    353  }
    354  }
    355 
    356  template<typename Container>
    357  auto update(int, Container &container)
    358  -> decltype(typename Container::mapped_type{}, void()) {
    359  // map like container
    360  Container other;
    361 
    362  for(auto &&pair: container) {
    363  using first_type = std::remove_const_t<typename std::decay_t<decltype(pair)>::first_type>;
    364  using second_type = typename std::decay_t<decltype(pair)>::second_type;
    365 
    366  if constexpr(std::is_same_v<first_type, Entity> && std::is_same_v<second_type, Entity>) {
    367  other.emplace(map(pair.first), map(pair.second));
    368  } else if constexpr(std::is_same_v<first_type, Entity>) {
    369  other.emplace(map(pair.first), std::move(pair.second));
    370  } else {
    371  static_assert(std::is_same_v<second_type, Entity>);
    372  other.emplace(std::move(pair.first), map(pair.second));
    373  }
    374  }
    375 
    376  std::swap(container, other);
    377  }
    378 
    379  template<typename Container>
    380  auto update(char, Container &container)
    381  -> decltype(typename Container::value_type{}, void()) {
    382  // vector like container
    383  static_assert(std::is_same_v<typename Container::value_type, Entity>);
    384 
    385  for(auto &&entt: container) {
    386  entt = map(entt);
    387  }
    388  }
    389 
    390  template<typename Other, typename Type, typename Member>
    391  void update(Other &instance, Member Type:: *member) {
    392  if constexpr(!std::is_same_v<Other, Type>) {
    393  return;
    394  } else if constexpr(std::is_same_v<Member, Entity>) {
    395  instance.*member = map(instance.*member);
    396  } else {
    397  // maybe a container? let's try...
    398  update(0, instance.*member);
    399  }
    400  }
    401 
    402  template<typename Archive>
    403  void assure(Archive &archive, void(basic_continuous_loader:: *member)(Entity)) {
    404  typename traits_type::entity_type length{};
    405  archive(length);
    406 
    407  while(length--) {
    408  Entity entt{};
    409  archive(entt);
    410  (this->*member)(entt);
    411  }
    412  }
    413 
    414  template<typename Component>
    415  void reset() {
    416  for(auto &&ref: remloc) {
    417  const auto local = ref.second.first;
    418 
    419  if(reg->valid(local)) {
    420  reg->template reset<Component>(local);
    421  }
    422  }
    423  }
    424 
    425  template<typename Other, typename Archive, typename... Type, typename... Member>
    426  void assign(Archive &archive, [[maybe_unused]] Member Type:: *... member) {
    427  typename traits_type::entity_type length{};
    428  archive(length);
    429 
    430  while(length--) {
    431  Entity entt{};
    432 
    433  if constexpr(std::is_empty_v<Other>) {
    434  archive(entt);
    435  restore(entt);
    436  reg->template assign_or_replace<Other>(map(entt));
    437  } else {
    438  Other instance{};
    439  archive(entt, instance);
    440  (update(instance, member), ...);
    441  restore(entt);
    442  reg->template assign_or_replace<Other>(map(entt), std::as_const(instance));
    443  }
    444  }
    445  }
    446 
    447 public:
    449  using entity_type = Entity;
    450 
    456  : reg{&source}
    457  {}
    458 
    461 
    464 
    475  template<typename Archive>
    476  basic_continuous_loader & entities(Archive &archive) {
    477  assure(archive, &basic_continuous_loader::restore);
    478  return *this;
    479  }
    480 
    491  template<typename Archive>
    492  basic_continuous_loader & destroyed(Archive &archive) {
    493  assure(archive, &basic_continuous_loader::destroy);
    494  return *this;
    495  }
    496 
    516  template<typename... Component, typename Archive, typename... Type, typename... Member>
    517  basic_continuous_loader & component(Archive &archive, Member Type:: *... member) {
    518  (reset<Component>(), ...);
    519  (assign<Component>(archive, member...), ...);
    520  return *this;
    521  }
    522 
    532  auto it = remloc.begin();
    533 
    534  while(it != remloc.cend()) {
    535  const auto local = it->second.first;
    536  bool &dirty = it->second.second;
    537 
    538  if(dirty) {
    539  dirty = false;
    540  ++it;
    541  } else {
    542  if(reg->valid(local)) {
    543  reg->destroy(local);
    544  }
    545 
    546  it = remloc.erase(it);
    547  }
    548  }
    549 
    550  return *this;
    551  }
    552 
    564  reg->orphans([this](const auto entt) {
    565  reg->destroy(entt);
    566  });
    567 
    568  return *this;
    569  }
    570 
    576  bool has(entity_type entt) const ENTT_NOEXCEPT {
    577  return (remloc.find(entt) != remloc.cend());
    578  }
    579 
    585  entity_type map(entity_type entt) const ENTT_NOEXCEPT {
    586  const auto it = remloc.find(entt);
    587  entity_type other = null;
    588 
    589  if(it != remloc.cend()) {
    590  other = it->second.first;
    591  }
    592 
    593  return other;
    594  }
    595 
    596 private:
    597  std::unordered_map<entity_type, std::pair<entity_type, bool>> remloc;
    599 };
    600 
    601 
    602 }
    603 
    604 
    605 #endif // ENTT_ENTITY_SNAPSHOT_HPP
    const basic_snapshot_loader & orphans() const
    Destroys those entities that have no components.
    Definition: snapshot.hpp:299
    -
    const basic_snapshot_loader & component(Archive &archive) const
    Restores components and assigns them to the right entities.
    Definition: snapshot.hpp:284
    -
    basic_continuous_loader & shrink()
    Helps to purge entities that no longer have a conterpart.
    Definition: snapshot.hpp:531
    -
    basic_continuous_loader(basic_registry< entity_type > &source) ENTT_NOEXCEPT
    Constructs a loader that is bound to a given registry.
    Definition: snapshot.hpp:455
    -
    const basic_snapshot & destroyed(Archive &archive) const
    Puts aside destroyed entities.
    Definition: snapshot.hpp:108
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    Entity entity_type
    Underlying entity identifier.
    Definition: snapshot.hpp:449
    -
    const basic_snapshot_loader & destroyed(Archive &archive) const
    Restores entities that were destroyed during serialization.
    Definition: snapshot.hpp:264
    -
    basic_continuous_loader & component(Archive &archive, Member Type::*... member)
    Restores components and assigns them to the right entities.
    Definition: snapshot.hpp:517
    -
    const basic_snapshot & component(Archive &archive, It first, It last) const
    Puts aside the given components for the entities in a range.
    Definition: snapshot.hpp:157
    -
    Utility class for continuous loading.
    Definition: fwd.hpp:45
    -
    constexpr auto null
    Compile-time constant for null entities.
    Definition: entity.hpp:168
    -
    Utility class to restore a snapshot as a whole.
    Definition: fwd.hpp:41
    -
    basic_snapshot & operator=(basic_snapshot &&)=default
    Default move assignment operator.
    -
    Fast and reliable entity-component system.
    Definition: fwd.hpp:13
    -
    basic_continuous_loader & orphans()
    Destroys those entities that have no components.
    Definition: snapshot.hpp:563
    -
    const basic_snapshot_loader & entities(Archive &archive) const
    Restores entities that were in use during serialization.
    Definition: snapshot.hpp:247
    -
    const basic_snapshot & component(Archive &archive) const
    Puts aside the given components.
    Definition: snapshot.hpp:137
    -
    basic_continuous_loader & destroyed(Archive &archive)
    Restores entities that were destroyed during serialization.
    Definition: snapshot.hpp:492
    -
    entity_type map(entity_type entt) const ENTT_NOEXCEPT
    Returns the identifier to which an entity refers.
    Definition: snapshot.hpp:585
    -
    basic_continuous_loader & entities(Archive &archive)
    Restores entities that were in use during serialization.
    Definition: snapshot.hpp:476
    -
    Utility class to create snapshots from a registry.
    Definition: fwd.hpp:37
    -
    const basic_snapshot & entities(Archive &archive) const
    Puts aside all the entities that are still in use.
    Definition: snapshot.hpp:91
    -
    bool has(entity_type entt) const ENTT_NOEXCEPT
    Tests if a loader knows about a given entity.
    Definition: snapshot.hpp:576
    -
    Entity traits.
    Definition: entity.hpp:20
    +
    1 #ifndef ENTT_ENTITY_SNAPSHOT_HPP
    +
    2 #define ENTT_ENTITY_SNAPSHOT_HPP
    +
    3 
    +
    4 
    +
    5 #include <array>
    +
    6 #include <cstddef>
    +
    7 #include <utility>
    +
    8 #include <iterator>
    +
    9 #include <type_traits>
    +
    10 #include <unordered_map>
    +
    11 #include "../config/config.h"
    +
    12 #include "entity.hpp"
    +
    13 #include "fwd.hpp"
    +
    14 
    +
    15 
    +
    16 namespace entt {
    +
    17 
    +
    18 
    +
    29 template<typename Entity>
    +
    30 class basic_snapshot {
    +
    32  friend class basic_registry<Entity>;
    +
    33 
    +
    34  using follow_fn_type = Entity(const basic_registry<Entity> &, const Entity);
    + +
    36 
    +
    37  basic_snapshot(const basic_registry<Entity> *source, Entity init, follow_fn_type *fn) ENTT_NOEXCEPT
    +
    38  : reg{source},
    +
    39  seed{init},
    +
    40  follow{fn}
    +
    41  {}
    +
    42 
    +
    43  template<typename Component, typename Archive, typename It>
    +
    44  void get(Archive &archive, std::size_t sz, It first, It last) const {
    +
    45  archive(typename traits_type::entity_type(sz));
    +
    46 
    +
    47  while(first != last) {
    +
    48  const auto entt = *(first++);
    +
    49 
    +
    50  if(reg->template has<Component>(entt)) {
    +
    51  if constexpr(std::is_empty_v<Component>) {
    +
    52  archive(entt);
    +
    53  } else {
    +
    54  archive(entt, reg->template get<Component>(entt));
    +
    55  }
    +
    56  }
    +
    57  }
    +
    58  }
    +
    59 
    +
    60  template<typename... Component, typename Archive, typename It, std::size_t... Indexes>
    +
    61  void component(Archive &archive, It first, It last, std::index_sequence<Indexes...>) const {
    +
    62  std::array<std::size_t, sizeof...(Indexes)> size{};
    +
    63  auto begin = first;
    +
    64 
    +
    65  while(begin != last) {
    +
    66  const auto entt = *(begin++);
    +
    67  ((reg->template has<Component>(entt) ? ++size[Indexes] : size[Indexes]), ...);
    +
    68  }
    +
    69 
    +
    70  (get<Component>(archive, size[Indexes], first, last), ...);
    +
    71  }
    +
    72 
    +
    73 public:
    +
    75  basic_snapshot(basic_snapshot &&) = default;
    +
    76 
    +
    78  basic_snapshot & operator=(basic_snapshot &&) = default;
    +
    79 
    +
    90  template<typename Archive>
    +
    91  const basic_snapshot & entities(Archive &archive) const {
    +
    92  archive(typename traits_type::entity_type(reg->alive()));
    +
    93  reg->each([&archive](const auto entt) { archive(entt); });
    +
    94  return *this;
    +
    95  }
    +
    96 
    +
    107  template<typename Archive>
    +
    108  const basic_snapshot & destroyed(Archive &archive) const {
    +
    109  auto size = reg->size() - reg->alive();
    +
    110  archive(typename traits_type::entity_type(size));
    +
    111 
    +
    112  if(size) {
    +
    113  auto curr = seed;
    +
    114  archive(curr);
    +
    115 
    +
    116  for(--size; size; --size) {
    +
    117  curr = follow(*reg, curr);
    +
    118  archive(curr);
    +
    119  }
    +
    120  }
    +
    121 
    +
    122  return *this;
    +
    123  }
    +
    124 
    +
    136  template<typename... Component, typename Archive>
    +
    137  const basic_snapshot & component(Archive &archive) const {
    +
    138  (component<Component>(archive, reg->template data<Component>(), reg->template data<Component>() + reg->template size<Component>()), ...);
    +
    139  return *this;
    +
    140  }
    +
    141 
    +
    156  template<typename... Component, typename Archive, typename It>
    +
    157  const basic_snapshot & component(Archive &archive, It first, It last) const {
    +
    158  component<Component...>(archive, first, last, std::index_sequence_for<Component...>{});
    +
    159  return *this;
    +
    160  }
    +
    161 
    +
    162 private:
    +
    163  const basic_registry<Entity> *reg;
    +
    164  const Entity seed;
    +
    165  follow_fn_type *follow;
    +
    166 };
    +
    167 
    +
    168 
    +
    179 template<typename Entity>
    +
    180 class basic_snapshot_loader {
    +
    182  friend class basic_registry<Entity>;
    +
    183 
    +
    184  using force_fn_type = void(basic_registry<Entity> &, const Entity, const bool);
    + +
    186 
    +
    187  basic_snapshot_loader(basic_registry<Entity> *source, force_fn_type *fn) ENTT_NOEXCEPT
    +
    188  : reg{source},
    +
    189  force{fn}
    +
    190  {
    +
    191  // to restore a snapshot as a whole requires a clean registry
    +
    192  ENTT_ASSERT(reg->empty());
    +
    193  }
    +
    194 
    +
    195  template<typename Archive>
    +
    196  void assure(Archive &archive, bool discard) const {
    +
    197  typename traits_type::entity_type length{};
    +
    198  archive(length);
    +
    199 
    +
    200  while(length--) {
    +
    201  Entity entt{};
    +
    202  archive(entt);
    +
    203  force(*reg, entt, discard);
    +
    204  }
    +
    205  }
    +
    206 
    +
    207  template<typename Type, typename Archive, typename... Args>
    +
    208  void assign(Archive &archive, Args... args) const {
    +
    209  typename traits_type::entity_type length{};
    +
    210  archive(length);
    +
    211 
    +
    212  while(length--) {
    +
    213  static constexpr auto discard = false;
    +
    214  Entity entt{};
    +
    215 
    +
    216  if constexpr(std::is_empty_v<Type>) {
    +
    217  archive(entt);
    +
    218  force(*reg, entt, discard);
    +
    219  reg->template assign<Type>(args..., entt);
    +
    220  } else {
    +
    221  Type instance{};
    +
    222  archive(entt, instance);
    +
    223  force(*reg, entt, discard);
    +
    224  reg->template assign<Type>(args..., entt, std::as_const(instance));
    +
    225  }
    +
    226  }
    +
    227  }
    +
    228 
    +
    229 public:
    +
    231  basic_snapshot_loader(basic_snapshot_loader &&) = default;
    +
    232 
    +
    234  basic_snapshot_loader & operator=(basic_snapshot_loader &&) = default;
    +
    235 
    +
    246  template<typename Archive>
    +
    247  const basic_snapshot_loader & entities(Archive &archive) const {
    +
    248  static constexpr auto discard = false;
    +
    249  assure(archive, discard);
    +
    250  return *this;
    +
    251  }
    +
    252 
    +
    263  template<typename Archive>
    +
    264  const basic_snapshot_loader & destroyed(Archive &archive) const {
    +
    265  static constexpr auto discard = true;
    +
    266  assure(archive, discard);
    +
    267  return *this;
    +
    268  }
    +
    269 
    +
    283  template<typename... Component, typename Archive>
    +
    284  const basic_snapshot_loader & component(Archive &archive) const {
    +
    285  (assign<Component>(archive), ...);
    +
    286  return *this;
    +
    287  }
    +
    288 
    +
    299  const basic_snapshot_loader & orphans() const {
    +
    300  reg->orphans([this](const auto entt) {
    +
    301  reg->destroy(entt);
    +
    302  });
    +
    303 
    +
    304  return *this;
    +
    305  }
    +
    306 
    +
    307 private:
    + +
    309  force_fn_type *force;
    +
    310 };
    +
    311 
    +
    312 
    +
    329 template<typename Entity>
    +
    330 class basic_continuous_loader {
    +
    331  using traits_type = entt_traits<std::underlying_type_t<Entity>>;
    +
    332 
    +
    333  void destroy(Entity entt) {
    +
    334  const auto it = remloc.find(entt);
    +
    335 
    +
    336  if(it == remloc.cend()) {
    +
    337  const auto local = reg->create();
    +
    338  remloc.emplace(entt, std::make_pair(local, true));
    +
    339  reg->destroy(local);
    +
    340  }
    +
    341  }
    +
    342 
    +
    343  void restore(Entity entt) {
    +
    344  const auto it = remloc.find(entt);
    +
    345 
    +
    346  if(it == remloc.cend()) {
    +
    347  const auto local = reg->create();
    +
    348  remloc.emplace(entt, std::make_pair(local, true));
    +
    349  } else {
    +
    350  remloc[entt].first = reg->valid(remloc[entt].first) ? remloc[entt].first : reg->create();
    +
    351  // set the dirty flag
    +
    352  remloc[entt].second = true;
    +
    353  }
    +
    354  }
    +
    355 
    +
    356  template<typename Container>
    +
    357  auto update(int, Container &container)
    +
    358  -> decltype(typename Container::mapped_type{}, void()) {
    +
    359  // map like container
    +
    360  Container other;
    +
    361 
    +
    362  for(auto &&pair: container) {
    +
    363  using first_type = std::remove_const_t<typename std::decay_t<decltype(pair)>::first_type>;
    +
    364  using second_type = typename std::decay_t<decltype(pair)>::second_type;
    +
    365 
    +
    366  if constexpr(std::is_same_v<first_type, Entity> && std::is_same_v<second_type, Entity>) {
    +
    367  other.emplace(map(pair.first), map(pair.second));
    +
    368  } else if constexpr(std::is_same_v<first_type, Entity>) {
    +
    369  other.emplace(map(pair.first), std::move(pair.second));
    +
    370  } else {
    +
    371  static_assert(std::is_same_v<second_type, Entity>);
    +
    372  other.emplace(std::move(pair.first), map(pair.second));
    +
    373  }
    +
    374  }
    +
    375 
    +
    376  std::swap(container, other);
    +
    377  }
    +
    378 
    +
    379  template<typename Container>
    +
    380  auto update(char, Container &container)
    +
    381  -> decltype(typename Container::value_type{}, void()) {
    +
    382  // vector like container
    +
    383  static_assert(std::is_same_v<typename Container::value_type, Entity>);
    +
    384 
    +
    385  for(auto &&entt: container) {
    +
    386  entt = map(entt);
    +
    387  }
    +
    388  }
    +
    389 
    +
    390  template<typename Other, typename Type, typename Member>
    +
    391  void update(Other &instance, Member Type:: *member) {
    +
    392  if constexpr(!std::is_same_v<Other, Type>) {
    +
    393  return;
    +
    394  } else if constexpr(std::is_same_v<Member, Entity>) {
    +
    395  instance.*member = map(instance.*member);
    +
    396  } else {
    +
    397  // maybe a container? let's try...
    +
    398  update(0, instance.*member);
    +
    399  }
    +
    400  }
    +
    401 
    +
    402  template<typename Archive>
    +
    403  void assure(Archive &archive, void(basic_continuous_loader:: *member)(Entity)) {
    +
    404  typename traits_type::entity_type length{};
    +
    405  archive(length);
    +
    406 
    +
    407  while(length--) {
    +
    408  Entity entt{};
    +
    409  archive(entt);
    +
    410  (this->*member)(entt);
    +
    411  }
    +
    412  }
    +
    413 
    +
    414  template<typename Component>
    +
    415  void reset() {
    +
    416  for(auto &&ref: remloc) {
    +
    417  const auto local = ref.second.first;
    +
    418 
    +
    419  if(reg->valid(local)) {
    +
    420  reg->template reset<Component>(local);
    +
    421  }
    +
    422  }
    +
    423  }
    +
    424 
    +
    425  template<typename Other, typename Archive, typename... Type, typename... Member>
    +
    426  void assign(Archive &archive, [[maybe_unused]] Member Type:: *... member) {
    +
    427  typename traits_type::entity_type length{};
    +
    428  archive(length);
    +
    429 
    +
    430  while(length--) {
    +
    431  Entity entt{};
    +
    432 
    +
    433  if constexpr(std::is_empty_v<Other>) {
    +
    434  archive(entt);
    +
    435  restore(entt);
    +
    436  reg->template assign_or_replace<Other>(map(entt));
    +
    437  } else {
    +
    438  Other instance{};
    +
    439  archive(entt, instance);
    +
    440  (update(instance, member), ...);
    +
    441  restore(entt);
    +
    442  reg->template assign_or_replace<Other>(map(entt), std::as_const(instance));
    +
    443  }
    +
    444  }
    +
    445  }
    +
    446 
    +
    447 public:
    +
    449  using entity_type = Entity;
    +
    450 
    + +
    456  : reg{&source}
    +
    457  {}
    +
    458 
    + +
    461 
    + +
    464 
    +
    475  template<typename Archive>
    +
    476  basic_continuous_loader & entities(Archive &archive) {
    +
    477  assure(archive, &basic_continuous_loader::restore);
    +
    478  return *this;
    +
    479  }
    +
    480 
    +
    491  template<typename Archive>
    +
    492  basic_continuous_loader & destroyed(Archive &archive) {
    +
    493  assure(archive, &basic_continuous_loader::destroy);
    +
    494  return *this;
    +
    495  }
    +
    496 
    +
    516  template<typename... Component, typename Archive, typename... Type, typename... Member>
    +
    517  basic_continuous_loader & component(Archive &archive, Member Type:: *... member) {
    +
    518  (reset<Component>(), ...);
    +
    519  (assign<Component>(archive, member...), ...);
    +
    520  return *this;
    +
    521  }
    +
    522 
    + +
    532  auto it = remloc.begin();
    +
    533 
    +
    534  while(it != remloc.cend()) {
    +
    535  const auto local = it->second.first;
    +
    536  bool &dirty = it->second.second;
    +
    537 
    +
    538  if(dirty) {
    +
    539  dirty = false;
    +
    540  ++it;
    +
    541  } else {
    +
    542  if(reg->valid(local)) {
    +
    543  reg->destroy(local);
    +
    544  }
    +
    545 
    +
    546  it = remloc.erase(it);
    +
    547  }
    +
    548  }
    +
    549 
    +
    550  return *this;
    +
    551  }
    +
    552 
    + +
    564  reg->orphans([this](const auto entt) {
    +
    565  reg->destroy(entt);
    +
    566  });
    +
    567 
    +
    568  return *this;
    +
    569  }
    +
    570 
    +
    576  bool has(entity_type entt) const ENTT_NOEXCEPT {
    +
    577  return (remloc.find(entt) != remloc.cend());
    +
    578  }
    +
    579 
    +
    585  entity_type map(entity_type entt) const ENTT_NOEXCEPT {
    +
    586  const auto it = remloc.find(entt);
    +
    587  entity_type other = null;
    +
    588 
    +
    589  if(it != remloc.cend()) {
    +
    590  other = it->second.first;
    +
    591  }
    +
    592 
    +
    593  return other;
    +
    594  }
    +
    595 
    +
    596 private:
    +
    597  std::unordered_map<entity_type, std::pair<entity_type, bool>> remloc;
    + +
    599 };
    +
    600 
    +
    601 
    +
    602 }
    +
    603 
    +
    604 
    +
    605 #endif // ENTT_ENTITY_SNAPSHOT_HPP
    +
    Entity entity_type
    Underlying entity identifier.
    Definition: snapshot.hpp:449
    +
    auto create()
    Creates a new entity and returns it.
    Definition: registry.hpp:565
    +
    const basic_snapshot_loader & destroyed(Archive &archive) const
    Restores entities that were destroyed during serialization.
    Definition: snapshot.hpp:264
    +
    Utility class to create snapshots from a registry.
    Definition: fwd.hpp:37
    +
    const basic_snapshot & component(Archive &archive) const
    Puts aside the given components.
    Definition: snapshot.hpp:137
    +
    const basic_snapshot & destroyed(Archive &archive) const
    Puts aside destroyed entities.
    Definition: snapshot.hpp:108
    +
    bool valid(const entity_type entity) const ENTT_NOEXCEPT
    Checks if an entity identifier refers to a valid entity.
    Definition: registry.hpp:500
    +
    const basic_snapshot_loader & entities(Archive &archive) const
    Restores entities that were in use during serialization.
    Definition: snapshot.hpp:247
    +
    void destroy(const entity_type entity)
    Destroys an entity and lets the registry recycle the identifier.
    Definition: registry.hpp:682
    +
    basic_continuous_loader & entities(Archive &archive)
    Restores entities that were in use during serialization.
    Definition: snapshot.hpp:476
    +
    void orphans(Func func) const
    Iterates orphans and applies them the given function object.
    Definition: registry.hpp:1251
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    basic_snapshot & operator=(basic_snapshot &&)=default
    Default move assignment operator.
    +
    basic_continuous_loader & destroyed(Archive &archive)
    Restores entities that were destroyed during serialization.
    Definition: snapshot.hpp:492
    +
    const basic_snapshot & component(Archive &archive, It first, It last) const
    Puts aside the given components for the entities in a range.
    Definition: snapshot.hpp:157
    +
    basic_continuous_loader & orphans()
    Destroys those entities that have no components.
    Definition: snapshot.hpp:563
    +
    basic_continuous_loader & operator=(basic_continuous_loader &&)=default
    Default move assignment operator.
    +
    basic_continuous_loader(basic_registry< entity_type > &source) ENTT_NOEXCEPT
    Constructs a loader that is bound to a given registry.
    Definition: snapshot.hpp:455
    +
    basic_snapshot_loader & operator=(basic_snapshot_loader &&)=default
    Default move assignment operator.
    +
    const basic_snapshot_loader & orphans() const
    Destroys those entities that have no components.
    Definition: snapshot.hpp:299
    +
    basic_continuous_loader & shrink()
    Helps to purge entities that no longer have a conterpart.
    Definition: snapshot.hpp:531
    +
    Utility class for continuous loading.
    Definition: fwd.hpp:45
    +
    entity_type map(entity_type entt) const ENTT_NOEXCEPT
    Returns the identifier to which an entity refers.
    Definition: snapshot.hpp:585
    +
    Fast and reliable entity-component system.
    Definition: fwd.hpp:13
    +
    bool has(entity_type entt) const ENTT_NOEXCEPT
    Tests if a loader knows about a given entity.
    Definition: snapshot.hpp:576
    +
    Entity traits.
    Definition: entity.hpp:20
    +
    basic_continuous_loader & component(Archive &archive, Member Type::*... member)
    Restores components and assigns them to the right entities.
    Definition: snapshot.hpp:517
    +
    const basic_snapshot & entities(Archive &archive) const
    Puts aside all the entities that are still in use.
    Definition: snapshot.hpp:91
    +
    const basic_snapshot_loader & component(Archive &archive) const
    Restores components and assigns them to the right entities.
    Definition: snapshot.hpp:284
    +
    Utility class to restore a snapshot as a whole.
    Definition: fwd.hpp:41
    diff --git a/sparse__set_8hpp_source.html b/sparse__set_8hpp_source.html index 8e994cc9d..84687fded 100644 --- a/sparse__set_8hpp_source.html +++ b/sparse__set_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/entity/sparse_set.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    sparse_set.hpp
    -
    1 #ifndef ENTT_ENTITY_SPARSE_SET_HPP
    2 #define ENTT_ENTITY_SPARSE_SET_HPP
    3 
    4 
    5 #include <algorithm>
    6 #include <iterator>
    7 #include <utility>
    8 #include <vector>
    9 #include <memory>
    10 #include <cstddef>
    11 #include <numeric>
    12 #include <type_traits>
    13 #include "../config/config.h"
    14 #include "../core/algorithm.hpp"
    15 #include "entity.hpp"
    16 #include "fwd.hpp"
    17 
    18 
    19 namespace entt {
    20 
    21 
    49 template<typename Entity>
    50 class sparse_set {
    52 
    53  static_assert(ENTT_PAGE_SIZE && ((ENTT_PAGE_SIZE & (ENTT_PAGE_SIZE - 1)) == 0));
    54  static constexpr auto entt_per_page = ENTT_PAGE_SIZE / sizeof(typename traits_type::entity_type);
    55 
    56  class iterator {
    57  friend class sparse_set<Entity>;
    58 
    59  using direct_type = const std::vector<Entity>;
    60  using index_type = typename traits_type::difference_type;
    61 
    62  iterator(direct_type *ref, const index_type idx) ENTT_NOEXCEPT
    63  : direct{ref}, index{idx}
    64  {}
    65 
    66  public:
    67  using difference_type = index_type;
    68  using value_type = Entity;
    69  using pointer = const value_type *;
    70  using reference = const value_type &;
    71  using iterator_category = std::random_access_iterator_tag;
    72 
    73  iterator() ENTT_NOEXCEPT = default;
    74 
    75  iterator & operator++() ENTT_NOEXCEPT {
    76  return --index, *this;
    77  }
    78 
    79  iterator operator++(int) ENTT_NOEXCEPT {
    80  iterator orig = *this;
    81  return ++(*this), orig;
    82  }
    83 
    84  iterator & operator--() ENTT_NOEXCEPT {
    85  return ++index, *this;
    86  }
    87 
    88  iterator operator--(int) ENTT_NOEXCEPT {
    89  iterator orig = *this;
    90  return --(*this), orig;
    91  }
    92 
    93  iterator & operator+=(const difference_type value) ENTT_NOEXCEPT {
    94  index -= value;
    95  return *this;
    96  }
    97 
    98  iterator operator+(const difference_type value) const ENTT_NOEXCEPT {
    99  return iterator{direct, index-value};
    100  }
    101 
    102  iterator & operator-=(const difference_type value) ENTT_NOEXCEPT {
    103  return (*this += -value);
    104  }
    105 
    106  iterator operator-(const difference_type value) const ENTT_NOEXCEPT {
    107  return (*this + -value);
    108  }
    109 
    110  difference_type operator-(const iterator &other) const ENTT_NOEXCEPT {
    111  return other.index - index;
    112  }
    113 
    114  reference operator[](const difference_type value) const ENTT_NOEXCEPT {
    115  const auto pos = size_type(index-value-1);
    116  return (*direct)[pos];
    117  }
    118 
    119  bool operator==(const iterator &other) const ENTT_NOEXCEPT {
    120  return other.index == index;
    121  }
    122 
    123  bool operator!=(const iterator &other) const ENTT_NOEXCEPT {
    124  return !(*this == other);
    125  }
    126 
    127  bool operator<(const iterator &other) const ENTT_NOEXCEPT {
    128  return index > other.index;
    129  }
    130 
    131  bool operator>(const iterator &other) const ENTT_NOEXCEPT {
    132  return index < other.index;
    133  }
    134 
    135  bool operator<=(const iterator &other) const ENTT_NOEXCEPT {
    136  return !(*this > other);
    137  }
    138 
    139  bool operator>=(const iterator &other) const ENTT_NOEXCEPT {
    140  return !(*this < other);
    141  }
    142 
    143  pointer operator->() const ENTT_NOEXCEPT {
    144  const auto pos = size_type(index-1);
    145  return &(*direct)[pos];
    146  }
    147 
    148  reference operator*() const ENTT_NOEXCEPT {
    149  return *operator->();
    150  }
    151 
    152  private:
    153  direct_type *direct;
    154  index_type index;
    155  };
    156 
    157  void assure(const std::size_t page) {
    158  if(!(page < reverse.size())) {
    159  reverse.resize(page+1);
    160  }
    161 
    162  if(!reverse[page]) {
    163  reverse[page] = std::make_unique<entity_type[]>(entt_per_page);
    164  // null is safe in all cases for our purposes
    165  std::fill_n(reverse[page].get(), entt_per_page, null);
    166  }
    167  }
    168 
    169  auto map(const Entity entt) const ENTT_NOEXCEPT {
    170  const auto identifier = to_integer(entt) & traits_type::entity_mask;
    171  const auto page = size_type(identifier / entt_per_page);
    172  const auto offset = size_type(identifier & (entt_per_page - 1));
    173  return std::make_pair(page, offset);
    174  }
    175 
    176 public:
    178  using entity_type = Entity;
    180  using size_type = std::size_t;
    182  using iterator_type = iterator;
    183 
    185  sparse_set() = default;
    186 
    191  sparse_set(const sparse_set &other)
    192  : reverse{},
    193  direct{other.direct}
    194  {
    195  for(size_type pos{}, last = other.reverse.size(); pos < last; ++pos) {
    196  if(other.reverse[pos]) {
    197  assure(pos);
    198  std::copy_n(other.reverse[pos].get(), entt_per_page, reverse[pos].get());
    199  }
    200  }
    201  }
    202 
    204  sparse_set(sparse_set &&) = default;
    205 
    207  virtual ~sparse_set() ENTT_NOEXCEPT = default;
    208 
    214  sparse_set & operator=(const sparse_set &other) {
    215  if(&other != this) {
    216  auto tmp{other};
    217  *this = std::move(tmp);
    218  }
    219 
    220  return *this;
    221  }
    222 
    224  sparse_set & operator=(sparse_set &&) = default;
    225 
    234  void reserve(const size_type cap) {
    235  direct.reserve(cap);
    236  }
    237 
    243  size_type capacity() const ENTT_NOEXCEPT {
    244  return direct.capacity();
    245  }
    246 
    248  void shrink_to_fit() {
    249  // conservative approach
    250  if(direct.empty()) {
    251  reverse.clear();
    252  }
    253 
    254  reverse.shrink_to_fit();
    255  direct.shrink_to_fit();
    256  }
    257 
    268  size_type extent() const ENTT_NOEXCEPT {
    269  return reverse.size() * entt_per_page;
    270  }
    271 
    282  size_type size() const ENTT_NOEXCEPT {
    283  return direct.size();
    284  }
    285 
    290  bool empty() const ENTT_NOEXCEPT {
    291  return direct.empty();
    292  }
    293 
    309  const entity_type * data() const ENTT_NOEXCEPT {
    310  return direct.data();
    311  }
    312 
    326  iterator_type begin() const ENTT_NOEXCEPT {
    327  const typename traits_type::difference_type pos = direct.size();
    328  return iterator_type{&direct, pos};
    329  }
    330 
    345  iterator_type end() const ENTT_NOEXCEPT {
    346  return iterator_type{&direct, {}};
    347  }
    348 
    355  iterator_type find(const entity_type entt) const ENTT_NOEXCEPT {
    356  return has(entt) ? --(end() - index(entt)) : end();
    357  }
    358 
    364  bool has(const entity_type entt) const ENTT_NOEXCEPT {
    365  auto [page, offset] = map(entt);
    366  // testing against null permits to avoid accessing the direct vector
    367  return (page < reverse.size() && reverse[page] && reverse[page][offset] != null);
    368  }
    369 
    382  size_type index(const entity_type entt) const ENTT_NOEXCEPT {
    383  ENTT_ASSERT(has(entt));
    384  auto [page, offset] = map(entt);
    385  return size_type(reverse[page][offset]);
    386  }
    387 
    399  void construct(const entity_type entt) {
    400  ENTT_ASSERT(!has(entt));
    401  auto [page, offset] = map(entt);
    402  assure(page);
    403  reverse[page][offset] = entity_type(direct.size());
    404  direct.push_back(entt);
    405  }
    406 
    420  template<typename It>
    421  void batch(It first, It last) {
    422  std::for_each(first, last, [this, next = direct.size()](const auto entt) mutable {
    423  ENTT_ASSERT(!has(entt));
    424  auto [page, offset] = map(entt);
    425  assure(page);
    426  reverse[page][offset] = entity_type(next++);
    427  });
    428 
    429  direct.insert(direct.end(), first, last);
    430  }
    431 
    443  void destroy(const entity_type entt) {
    444  ENTT_ASSERT(has(entt));
    445  auto [from_page, from_offset] = map(entt);
    446  auto [to_page, to_offset] = map(direct.back());
    447  direct[size_type(reverse[from_page][from_offset])] = entity_type(direct.back());
    448  reverse[to_page][to_offset] = reverse[from_page][from_offset];
    449  reverse[from_page][from_offset] = null;
    450  direct.pop_back();
    451  }
    452 
    468  virtual void swap(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT {
    469  auto [src_page, src_offset] = map(lhs);
    470  auto [dst_page, dst_offset] = map(rhs);
    471  auto &from = reverse[src_page][src_offset];
    472  auto &to = reverse[dst_page][dst_offset];
    473  std::swap(direct[size_type(from)], direct[size_type(to)]);
    474  std::swap(from, to);
    475  }
    476 
    516  template<typename Compare, typename Sort = std_sort, typename... Args>
    517  void sort(iterator_type first, iterator_type last, Compare compare, Sort algo = Sort{}, Args &&... args) {
    518  ENTT_ASSERT(!(last < first));
    519  ENTT_ASSERT(!(last > end()));
    520 
    521  const auto length = std::distance(first, last);
    522  const auto skip = std::distance(last, end());
    523  const auto to = direct.rend() - skip;
    524  const auto from = to - length;
    525 
    526  algo(from, to, std::move(compare), std::forward<Args>(args)...);
    527 
    528  for(size_type pos = skip, end = skip+length; pos < end; ++pos) {
    529  auto [page, offset] = map(direct[pos]);
    530  reverse[page][offset] = entity_type(pos);
    531  }
    532  }
    533 
    561  template<typename Apply, typename Compare, typename Sort = std_sort, typename... Args>
    562  void arrange(iterator_type first, iterator_type last, Apply apply, Compare compare, Sort algo = Sort{}, Args &&... args) {
    563  ENTT_ASSERT(!(last < first));
    564  ENTT_ASSERT(!(last > end()));
    565 
    566  const auto length = std::distance(first, last);
    567  const auto skip = std::distance(last, end());
    568  const auto to = direct.rend() - skip;
    569  const auto from = to - length;
    570 
    571  algo(from, to, std::move(compare), std::forward<Args>(args)...);
    572 
    573  for(size_type pos = skip, end = skip+length; pos < end; ++pos) {
    574  auto curr = pos;
    575  auto next = index(direct[curr]);
    576 
    577  while(curr != next) {
    578  apply(direct[curr], direct[next]);
    579  auto [page, offset] = map(direct[curr]);
    580  reverse[page][offset] = entity_type(curr);
    581 
    582  curr = next;
    583  next = index(direct[curr]);
    584  }
    585  }
    586  }
    587 
    608  void respect(const sparse_set &other) ENTT_NOEXCEPT {
    609  const auto to = other.end();
    610  auto from = other.begin();
    611 
    612  size_type pos = direct.size() - 1;
    613 
    614  while(pos && from != to) {
    615  if(has(*from)) {
    616  if(*from != direct[pos]) {
    617  swap(direct[pos], *from);
    618  }
    619 
    620  --pos;
    621  }
    622 
    623  ++from;
    624  }
    625  }
    626 
    630  void reset() {
    631  reverse.clear();
    632  direct.clear();
    633  }
    634 
    635 private:
    636  std::vector<std::unique_ptr<entity_type[]>> reverse;
    637  std::vector<entity_type> direct;
    638 };
    639 
    640 
    641 }
    642 
    643 
    644 #endif // ENTT_ENTITY_SPARSE_SET_HPP
    void arrange(iterator_type first, iterator_type last, Apply apply, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: sparse_set.hpp:562
    -
    void shrink_to_fit()
    Requests the removal of unused capacity.
    Definition: sparse_set.hpp:248
    -
    Basic sparse set implementation.
    Definition: sparse_set.hpp:50
    -
    sparse_set & operator=(const sparse_set &other)
    Copy assignment operator.
    Definition: sparse_set.hpp:214
    -
    void reserve(const size_type cap)
    Increases the capacity of a sparse set.
    Definition: sparse_set.hpp:234
    -
    void respect(const sparse_set &other) ENTT_NOEXCEPT
    Sort entities according to their order in another sparse set.
    Definition: sparse_set.hpp:608
    -
    sparse_set(const sparse_set &other)
    Copy constructor.
    Definition: sparse_set.hpp:191
    -
    size_type size() const ENTT_NOEXCEPT
    Returns the number of elements in a sparse set.
    Definition: sparse_set.hpp:282
    -
    constexpr bool operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT
    Compares two hashed strings.
    -
    void batch(It first, It last)
    Assigns one or more entities to a sparse set.
    Definition: sparse_set.hpp:421
    -
    const entity_type * data() const ENTT_NOEXCEPT
    Direct access to the internal packed array.
    Definition: sparse_set.hpp:309
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    bool has(const entity_type entt) const ENTT_NOEXCEPT
    Checks if a sparse set contains an entity.
    Definition: sparse_set.hpp:364
    -
    std::size_t size_type
    Unsigned integer type.
    Definition: sparse_set.hpp:180
    -
    size_type index(const entity_type entt) const ENTT_NOEXCEPT
    Returns the position of an entity in a sparse set.
    Definition: sparse_set.hpp:382
    -
    void destroy(const entity_type entt)
    Removes an entity from a sparse set.
    Definition: sparse_set.hpp:443
    -
    iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: sparse_set.hpp:326
    -
    constexpr auto null
    Compile-time constant for null entities.
    Definition: entity.hpp:168
    -
    virtual ~sparse_set() ENTT_NOEXCEPT=default
    Default destructor.
    -
    size_type extent() const ENTT_NOEXCEPT
    Returns the extent of a sparse set.
    Definition: sparse_set.hpp:268
    -
    void sort(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: sparse_set.hpp:517
    -
    size_type capacity() const ENTT_NOEXCEPT
    Returns the number of elements that a sparse set has currently allocated space for.
    Definition: sparse_set.hpp:243
    -
    entity_type entity_type
    Underlying entity identifier.
    Definition: sparse_set.hpp:178
    -
    Types identifiers.
    Definition: ident.hpp:42
    -
    Function object to wrap std::sort in a class type.
    Definition: algorithm.hpp:23
    -
    virtual void swap(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT
    Swaps two entities in the internal packed array.
    Definition: sparse_set.hpp:468
    -
    bool empty() const ENTT_NOEXCEPT
    Checks whether a sparse set is empty.
    Definition: sparse_set.hpp:290
    -
    sparse_set()=default
    Default constructor.
    -
    iterator_type end() const ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: sparse_set.hpp:345
    -
    void reset()
    Resets a sparse set.
    Definition: sparse_set.hpp:630
    -
    iterator_type find(const entity_type entt) const ENTT_NOEXCEPT
    Finds an entity.
    Definition: sparse_set.hpp:355
    -
    Entity traits.
    Definition: entity.hpp:20
    -
    iterator iterator_type
    Random access iterator type.
    Definition: sparse_set.hpp:182
    -
    void construct(const entity_type entt)
    Assigns an entity to a sparse set.
    Definition: sparse_set.hpp:399
    +
    1 #ifndef ENTT_ENTITY_SPARSE_SET_HPP
    +
    2 #define ENTT_ENTITY_SPARSE_SET_HPP
    +
    3 
    +
    4 
    +
    5 #include <algorithm>
    +
    6 #include <iterator>
    +
    7 #include <utility>
    +
    8 #include <vector>
    +
    9 #include <memory>
    +
    10 #include <cstddef>
    +
    11 #include <numeric>
    +
    12 #include <type_traits>
    +
    13 #include "../config/config.h"
    +
    14 #include "../core/algorithm.hpp"
    +
    15 #include "entity.hpp"
    +
    16 #include "fwd.hpp"
    +
    17 
    +
    18 
    +
    19 namespace entt {
    +
    20 
    +
    21 
    +
    49 template<typename Entity>
    +
    50 class sparse_set {
    + +
    52 
    +
    53  static_assert(ENTT_PAGE_SIZE && ((ENTT_PAGE_SIZE & (ENTT_PAGE_SIZE - 1)) == 0));
    +
    54  static constexpr auto entt_per_page = ENTT_PAGE_SIZE / sizeof(typename traits_type::entity_type);
    +
    55 
    +
    56  class iterator {
    +
    57  friend class sparse_set<Entity>;
    +
    58 
    +
    59  using direct_type = const std::vector<Entity>;
    +
    60  using index_type = typename traits_type::difference_type;
    +
    61 
    +
    62  iterator(direct_type *ref, const index_type idx) ENTT_NOEXCEPT
    +
    63  : direct{ref}, index{idx}
    +
    64  {}
    +
    65 
    +
    66  public:
    +
    67  using difference_type = index_type;
    +
    68  using value_type = Entity;
    +
    69  using pointer = const value_type *;
    +
    70  using reference = const value_type &;
    +
    71  using iterator_category = std::random_access_iterator_tag;
    +
    72 
    +
    73  iterator() ENTT_NOEXCEPT = default;
    +
    74 
    +
    75  iterator & operator++() ENTT_NOEXCEPT {
    +
    76  return --index, *this;
    +
    77  }
    +
    78 
    +
    79  iterator operator++(int) ENTT_NOEXCEPT {
    +
    80  iterator orig = *this;
    +
    81  return ++(*this), orig;
    +
    82  }
    +
    83 
    +
    84  iterator & operator--() ENTT_NOEXCEPT {
    +
    85  return ++index, *this;
    +
    86  }
    +
    87 
    +
    88  iterator operator--(int) ENTT_NOEXCEPT {
    +
    89  iterator orig = *this;
    +
    90  return --(*this), orig;
    +
    91  }
    +
    92 
    +
    93  iterator & operator+=(const difference_type value) ENTT_NOEXCEPT {
    +
    94  index -= value;
    +
    95  return *this;
    +
    96  }
    +
    97 
    +
    98  iterator operator+(const difference_type value) const ENTT_NOEXCEPT {
    +
    99  return iterator{direct, index-value};
    +
    100  }
    +
    101 
    +
    102  iterator & operator-=(const difference_type value) ENTT_NOEXCEPT {
    +
    103  return (*this += -value);
    +
    104  }
    +
    105 
    +
    106  iterator operator-(const difference_type value) const ENTT_NOEXCEPT {
    +
    107  return (*this + -value);
    +
    108  }
    +
    109 
    +
    110  difference_type operator-(const iterator &other) const ENTT_NOEXCEPT {
    +
    111  return other.index - index;
    +
    112  }
    +
    113 
    +
    114  reference operator[](const difference_type value) const ENTT_NOEXCEPT {
    +
    115  const auto pos = size_type(index-value-1);
    +
    116  return (*direct)[pos];
    +
    117  }
    +
    118 
    +
    119  bool operator==(const iterator &other) const ENTT_NOEXCEPT {
    +
    120  return other.index == index;
    +
    121  }
    +
    122 
    +
    123  bool operator!=(const iterator &other) const ENTT_NOEXCEPT {
    +
    124  return !(*this == other);
    +
    125  }
    +
    126 
    +
    127  bool operator<(const iterator &other) const ENTT_NOEXCEPT {
    +
    128  return index > other.index;
    +
    129  }
    +
    130 
    +
    131  bool operator>(const iterator &other) const ENTT_NOEXCEPT {
    +
    132  return index < other.index;
    +
    133  }
    +
    134 
    +
    135  bool operator<=(const iterator &other) const ENTT_NOEXCEPT {
    +
    136  return !(*this > other);
    +
    137  }
    +
    138 
    +
    139  bool operator>=(const iterator &other) const ENTT_NOEXCEPT {
    +
    140  return !(*this < other);
    +
    141  }
    +
    142 
    +
    143  pointer operator->() const ENTT_NOEXCEPT {
    +
    144  const auto pos = size_type(index-1);
    +
    145  return &(*direct)[pos];
    +
    146  }
    +
    147 
    +
    148  reference operator*() const ENTT_NOEXCEPT {
    +
    149  return *operator->();
    +
    150  }
    +
    151 
    +
    152  private:
    +
    153  direct_type *direct;
    +
    154  index_type index;
    +
    155  };
    +
    156 
    +
    157  void assure(const std::size_t page) {
    +
    158  if(!(page < reverse.size())) {
    +
    159  reverse.resize(page+1);
    +
    160  }
    +
    161 
    +
    162  if(!reverse[page]) {
    +
    163  reverse[page] = std::make_unique<entity_type[]>(entt_per_page);
    +
    164  // null is safe in all cases for our purposes
    +
    165  std::fill_n(reverse[page].get(), entt_per_page, null);
    +
    166  }
    +
    167  }
    +
    168 
    +
    169  auto map(const Entity entt) const ENTT_NOEXCEPT {
    +
    170  const auto identifier = to_integer(entt) & traits_type::entity_mask;
    +
    171  const auto page = size_type(identifier / entt_per_page);
    +
    172  const auto offset = size_type(identifier & (entt_per_page - 1));
    +
    173  return std::make_pair(page, offset);
    +
    174  }
    +
    175 
    +
    176 public:
    +
    178  using entity_type = Entity;
    +
    180  using size_type = std::size_t;
    +
    182  using iterator_type = iterator;
    +
    183 
    +
    185  sparse_set() = default;
    +
    186 
    +
    191  sparse_set(const sparse_set &other)
    +
    192  : reverse{},
    +
    193  direct{other.direct}
    +
    194  {
    +
    195  for(size_type pos{}, last = other.reverse.size(); pos < last; ++pos) {
    +
    196  if(other.reverse[pos]) {
    +
    197  assure(pos);
    +
    198  std::copy_n(other.reverse[pos].get(), entt_per_page, reverse[pos].get());
    +
    199  }
    +
    200  }
    +
    201  }
    +
    202 
    +
    204  sparse_set(sparse_set &&) = default;
    +
    205 
    +
    207  virtual ~sparse_set() ENTT_NOEXCEPT = default;
    +
    208 
    +
    214  sparse_set & operator=(const sparse_set &other) {
    +
    215  if(&other != this) {
    +
    216  auto tmp{other};
    +
    217  *this = std::move(tmp);
    +
    218  }
    +
    219 
    +
    220  return *this;
    +
    221  }
    +
    222 
    +
    224  sparse_set & operator=(sparse_set &&) = default;
    +
    225 
    +
    234  void reserve(const size_type cap) {
    +
    235  direct.reserve(cap);
    +
    236  }
    +
    237 
    +
    243  size_type capacity() const ENTT_NOEXCEPT {
    +
    244  return direct.capacity();
    +
    245  }
    +
    246 
    +
    248  void shrink_to_fit() {
    +
    249  // conservative approach
    +
    250  if(direct.empty()) {
    +
    251  reverse.clear();
    +
    252  }
    +
    253 
    +
    254  reverse.shrink_to_fit();
    +
    255  direct.shrink_to_fit();
    +
    256  }
    +
    257 
    +
    268  size_type extent() const ENTT_NOEXCEPT {
    +
    269  return reverse.size() * entt_per_page;
    +
    270  }
    +
    271 
    +
    282  size_type size() const ENTT_NOEXCEPT {
    +
    283  return direct.size();
    +
    284  }
    +
    285 
    +
    290  bool empty() const ENTT_NOEXCEPT {
    +
    291  return direct.empty();
    +
    292  }
    +
    293 
    +
    309  const entity_type * data() const ENTT_NOEXCEPT {
    +
    310  return direct.data();
    +
    311  }
    +
    312 
    +
    326  iterator_type begin() const ENTT_NOEXCEPT {
    +
    327  const typename traits_type::difference_type pos = direct.size();
    +
    328  return iterator_type{&direct, pos};
    +
    329  }
    +
    330 
    +
    345  iterator_type end() const ENTT_NOEXCEPT {
    +
    346  return iterator_type{&direct, {}};
    +
    347  }
    +
    348 
    +
    355  iterator_type find(const entity_type entt) const ENTT_NOEXCEPT {
    +
    356  return has(entt) ? --(end() - index(entt)) : end();
    +
    357  }
    +
    358 
    +
    364  bool has(const entity_type entt) const ENTT_NOEXCEPT {
    +
    365  auto [page, offset] = map(entt);
    +
    366  // testing against null permits to avoid accessing the direct vector
    +
    367  return (page < reverse.size() && reverse[page] && reverse[page][offset] != null);
    +
    368  }
    +
    369 
    +
    382  size_type index(const entity_type entt) const ENTT_NOEXCEPT {
    +
    383  ENTT_ASSERT(has(entt));
    +
    384  auto [page, offset] = map(entt);
    +
    385  return size_type(reverse[page][offset]);
    +
    386  }
    +
    387 
    +
    399  void construct(const entity_type entt) {
    +
    400  ENTT_ASSERT(!has(entt));
    +
    401  auto [page, offset] = map(entt);
    +
    402  assure(page);
    +
    403  reverse[page][offset] = entity_type(direct.size());
    +
    404  direct.push_back(entt);
    +
    405  }
    +
    406 
    +
    420  template<typename It>
    +
    421  void batch(It first, It last) {
    +
    422  std::for_each(first, last, [this, next = direct.size()](const auto entt) mutable {
    +
    423  ENTT_ASSERT(!has(entt));
    +
    424  auto [page, offset] = map(entt);
    +
    425  assure(page);
    +
    426  reverse[page][offset] = entity_type(next++);
    +
    427  });
    +
    428 
    +
    429  direct.insert(direct.end(), first, last);
    +
    430  }
    +
    431 
    +
    443  void destroy(const entity_type entt) {
    +
    444  ENTT_ASSERT(has(entt));
    +
    445  auto [from_page, from_offset] = map(entt);
    +
    446  auto [to_page, to_offset] = map(direct.back());
    +
    447  direct[size_type(reverse[from_page][from_offset])] = entity_type(direct.back());
    +
    448  reverse[to_page][to_offset] = reverse[from_page][from_offset];
    +
    449  reverse[from_page][from_offset] = null;
    +
    450  direct.pop_back();
    +
    451  }
    +
    452 
    +
    468  virtual void swap(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT {
    +
    469  auto [src_page, src_offset] = map(lhs);
    +
    470  auto [dst_page, dst_offset] = map(rhs);
    +
    471  auto &from = reverse[src_page][src_offset];
    +
    472  auto &to = reverse[dst_page][dst_offset];
    +
    473  std::swap(direct[size_type(from)], direct[size_type(to)]);
    +
    474  std::swap(from, to);
    +
    475  }
    +
    476 
    +
    516  template<typename Compare, typename Sort = std_sort, typename... Args>
    +
    517  void sort(iterator_type first, iterator_type last, Compare compare, Sort algo = Sort{}, Args &&... args) {
    +
    518  ENTT_ASSERT(!(last < first));
    +
    519  ENTT_ASSERT(!(last > end()));
    +
    520 
    +
    521  const auto length = std::distance(first, last);
    +
    522  const auto skip = std::distance(last, end());
    +
    523  const auto to = direct.rend() - skip;
    +
    524  const auto from = to - length;
    +
    525 
    +
    526  algo(from, to, std::move(compare), std::forward<Args>(args)...);
    +
    527 
    +
    528  for(size_type pos = skip, end = skip+length; pos < end; ++pos) {
    +
    529  auto [page, offset] = map(direct[pos]);
    +
    530  reverse[page][offset] = entity_type(pos);
    +
    531  }
    +
    532  }
    +
    533 
    +
    561  template<typename Apply, typename Compare, typename Sort = std_sort, typename... Args>
    +
    562  void arrange(iterator_type first, iterator_type last, Apply apply, Compare compare, Sort algo = Sort{}, Args &&... args) {
    +
    563  ENTT_ASSERT(!(last < first));
    +
    564  ENTT_ASSERT(!(last > end()));
    +
    565 
    +
    566  const auto length = std::distance(first, last);
    +
    567  const auto skip = std::distance(last, end());
    +
    568  const auto to = direct.rend() - skip;
    +
    569  const auto from = to - length;
    +
    570 
    +
    571  algo(from, to, std::move(compare), std::forward<Args>(args)...);
    +
    572 
    +
    573  for(size_type pos = skip, end = skip+length; pos < end; ++pos) {
    +
    574  auto curr = pos;
    +
    575  auto next = index(direct[curr]);
    +
    576 
    +
    577  while(curr != next) {
    +
    578  apply(direct[curr], direct[next]);
    +
    579  auto [page, offset] = map(direct[curr]);
    +
    580  reverse[page][offset] = entity_type(curr);
    +
    581 
    +
    582  curr = next;
    +
    583  next = index(direct[curr]);
    +
    584  }
    +
    585  }
    +
    586  }
    +
    587 
    +
    608  void respect(const sparse_set &other) ENTT_NOEXCEPT {
    +
    609  const auto to = other.end();
    +
    610  auto from = other.begin();
    +
    611 
    +
    612  size_type pos = direct.size() - 1;
    +
    613 
    +
    614  while(pos && from != to) {
    +
    615  if(has(*from)) {
    +
    616  if(*from != direct[pos]) {
    +
    617  swap(direct[pos], *from);
    +
    618  }
    +
    619 
    +
    620  --pos;
    +
    621  }
    +
    622 
    +
    623  ++from;
    +
    624  }
    +
    625  }
    +
    626 
    +
    630  void reset() {
    +
    631  reverse.clear();
    +
    632  direct.clear();
    +
    633  }
    +
    634 
    +
    635 private:
    +
    636  std::vector<std::unique_ptr<entity_type[]>> reverse;
    +
    637  std::vector<entity_type> direct;
    +
    638 };
    +
    639 
    +
    640 
    +
    641 }
    +
    642 
    +
    643 
    +
    644 #endif // ENTT_ENTITY_SPARSE_SET_HPP
    +
    virtual ~sparse_set() ENTT_NOEXCEPT=default
    Default destructor.
    +
    iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: sparse_set.hpp:326
    +
    iterator_type end() const ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: sparse_set.hpp:345
    +
    iterator_type find(const entity_type entt) const ENTT_NOEXCEPT
    Finds an entity.
    Definition: sparse_set.hpp:355
    +
    Basic sparse set implementation.
    Definition: sparse_set.hpp:50
    +
    constexpr get_t< Type... > get
    Variable template for lists of observed components.
    Definition: utility.hpp:40
    +
    void sort(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: sparse_set.hpp:517
    +
    sparse_set()=default
    Default constructor.
    +
    size_type extent() const ENTT_NOEXCEPT
    Returns the extent of a sparse set.
    Definition: sparse_set.hpp:268
    +
    void shrink_to_fit()
    Requests the removal of unused capacity.
    Definition: sparse_set.hpp:248
    +
    void destroy(const entity_type entt)
    Removes an entity from a sparse set.
    Definition: sparse_set.hpp:443
    +
    bool empty() const ENTT_NOEXCEPT
    Checks whether a sparse set is empty.
    Definition: sparse_set.hpp:290
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    sparse_set(const sparse_set &other)
    Copy constructor.
    Definition: sparse_set.hpp:191
    +
    const entity_type * data() const ENTT_NOEXCEPT
    Direct access to the internal packed array.
    Definition: sparse_set.hpp:309
    +
    size_type index(const entity_type entt) const ENTT_NOEXCEPT
    Returns the position of an entity in a sparse set.
    Definition: sparse_set.hpp:382
    +
    std::size_t size_type
    Unsigned integer type.
    Definition: sparse_set.hpp:180
    +
    void construct(const entity_type entt)
    Assigns an entity to a sparse set.
    Definition: sparse_set.hpp:399
    +
    constexpr bool operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT
    Compares two hashed strings.
    +
    size_type size() const ENTT_NOEXCEPT
    Returns the number of elements in a sparse set.
    Definition: sparse_set.hpp:282
    +
    size_type capacity() const ENTT_NOEXCEPT
    Returns the number of elements that a sparse set has currently allocated space for.
    Definition: sparse_set.hpp:243
    +
    Types identifiers.
    Definition: ident.hpp:42
    +
    bool has(const entity_type entt) const ENTT_NOEXCEPT
    Checks if a sparse set contains an entity.
    Definition: sparse_set.hpp:364
    +
    void batch(It first, It last)
    Assigns one or more entities to a sparse set.
    Definition: sparse_set.hpp:421
    +
    void respect(const sparse_set &other) ENTT_NOEXCEPT
    Sort entities according to their order in another sparse set.
    Definition: sparse_set.hpp:608
    +
    void reset()
    Resets a sparse set.
    Definition: sparse_set.hpp:630
    +
    Entity traits.
    Definition: entity.hpp:20
    +
    sparse_set & operator=(const sparse_set &other)
    Copy assignment operator.
    Definition: sparse_set.hpp:214
    +
    void reserve(const size_type cap)
    Increases the capacity of a sparse set.
    Definition: sparse_set.hpp:234
    +
    entity_type entity_type
    Underlying entity identifier.
    Definition: sparse_set.hpp:178
    +
    iterator iterator_type
    Random access iterator type.
    Definition: sparse_set.hpp:182
    +
    void arrange(iterator_type first, iterator_type last, Apply apply, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: sparse_set.hpp:562
    +
    virtual void swap(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT
    Swaps two entities in the internal packed array.
    Definition: sparse_set.hpp:468
    +
    Function object to wrap std::sort in a class type.
    Definition: algorithm.hpp:23
    diff --git a/storage_8hpp_source.html b/storage_8hpp_source.html index 1c1e123ae..6843b1141 100644 --- a/storage_8hpp_source.html +++ b/storage_8hpp_source.html @@ -1,9 +1,9 @@ - + - + EnTT: src/entt/entity/storage.hpp Source File @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    storage.hpp
    -
    1 #ifndef ENTT_ENTITY_STORAGE_HPP
    2 #define ENTT_ENTITY_STORAGE_HPP
    3 
    4 
    5 #include <algorithm>
    6 #include <iterator>
    7 #include <numeric>
    8 #include <utility>
    9 #include <vector>
    10 #include <cstddef>
    11 #include <type_traits>
    12 #include "../config/config.h"
    13 #include "../core/algorithm.hpp"
    14 #include "sparse_set.hpp"
    15 #include "entity.hpp"
    16 
    17 
    18 namespace entt {
    19 
    20 
    50 template<typename Entity, typename Type, typename = std::void_t<>>
    51 class basic_storage: public sparse_set<Entity> {
    54 
    55  template<bool Const>
    56  class iterator {
    57  friend class basic_storage<Entity, Type>;
    58 
    59  using instance_type = std::conditional_t<Const, const std::vector<Type>, std::vector<Type>>;
    60  using index_type = typename traits_type::difference_type;
    61 
    62  iterator(instance_type *ref, const index_type idx) ENTT_NOEXCEPT
    63  : instances{ref}, index{idx}
    64  {}
    65 
    66  public:
    67  using difference_type = index_type;
    68  using value_type = Type;
    69  using pointer = std::conditional_t<Const, const value_type *, value_type *>;
    70  using reference = std::conditional_t<Const, const value_type &, value_type &>;
    71  using iterator_category = std::random_access_iterator_tag;
    72 
    73  iterator() ENTT_NOEXCEPT = default;
    74 
    75  iterator & operator++() ENTT_NOEXCEPT {
    76  return --index, *this;
    77  }
    78 
    79  iterator operator++(int) ENTT_NOEXCEPT {
    80  iterator orig = *this;
    81  return ++(*this), orig;
    82  }
    83 
    84  iterator & operator--() ENTT_NOEXCEPT {
    85  return ++index, *this;
    86  }
    87 
    88  iterator operator--(int) ENTT_NOEXCEPT {
    89  iterator orig = *this;
    90  return --(*this), orig;
    91  }
    92 
    93  iterator & operator+=(const difference_type value) ENTT_NOEXCEPT {
    94  index -= value;
    95  return *this;
    96  }
    97 
    98  iterator operator+(const difference_type value) const ENTT_NOEXCEPT {
    99  return iterator{instances, index-value};
    100  }
    101 
    102  iterator & operator-=(const difference_type value) ENTT_NOEXCEPT {
    103  return (*this += -value);
    104  }
    105 
    106  iterator operator-(const difference_type value) const ENTT_NOEXCEPT {
    107  return (*this + -value);
    108  }
    109 
    110  difference_type operator-(const iterator &other) const ENTT_NOEXCEPT {
    111  return other.index - index;
    112  }
    113 
    114  reference operator[](const difference_type value) const ENTT_NOEXCEPT {
    115  const auto pos = size_type(index-value-1);
    116  return (*instances)[pos];
    117  }
    118 
    119  bool operator==(const iterator &other) const ENTT_NOEXCEPT {
    120  return other.index == index;
    121  }
    122 
    123  bool operator!=(const iterator &other) const ENTT_NOEXCEPT {
    124  return !(*this == other);
    125  }
    126 
    127  bool operator<(const iterator &other) const ENTT_NOEXCEPT {
    128  return index > other.index;
    129  }
    130 
    131  bool operator>(const iterator &other) const ENTT_NOEXCEPT {
    132  return index < other.index;
    133  }
    134 
    135  bool operator<=(const iterator &other) const ENTT_NOEXCEPT {
    136  return !(*this > other);
    137  }
    138 
    139  bool operator>=(const iterator &other) const ENTT_NOEXCEPT {
    140  return !(*this < other);
    141  }
    142 
    143  pointer operator->() const ENTT_NOEXCEPT {
    144  const auto pos = size_type(index-1);
    145  return &(*instances)[pos];
    146  }
    147 
    148  reference operator*() const ENTT_NOEXCEPT {
    149  return *operator->();
    150  }
    151 
    152  private:
    153  instance_type *instances;
    154  index_type index;
    155  };
    156 
    157 public:
    159  using object_type = Type;
    161  using entity_type = Entity;
    163  using size_type = std::size_t;
    165  using iterator_type = iterator<false>;
    167  using const_iterator_type = iterator<true>;
    168 
    177  void reserve(const size_type cap) {
    179  instances.reserve(cap);
    180  }
    181 
    183  void shrink_to_fit() {
    185  instances.shrink_to_fit();
    186  }
    187 
    203  const object_type * raw() const ENTT_NOEXCEPT {
    204  return instances.data();
    205  }
    206 
    208  object_type * raw() ENTT_NOEXCEPT {
    209  return const_cast<object_type *>(std::as_const(*this).raw());
    210  }
    211 
    224  const_iterator_type cbegin() const ENTT_NOEXCEPT {
    225  const typename traits_type::difference_type pos = underlying_type::size();
    226  return const_iterator_type{&instances, pos};
    227  }
    228 
    230  const_iterator_type begin() const ENTT_NOEXCEPT {
    231  return cbegin();
    232  }
    233 
    235  iterator_type begin() ENTT_NOEXCEPT {
    236  const typename traits_type::difference_type pos = underlying_type::size();
    237  return iterator_type{&instances, pos};
    238  }
    239 
    254  const_iterator_type cend() const ENTT_NOEXCEPT {
    255  return const_iterator_type{&instances, {}};
    256  }
    257 
    259  const_iterator_type end() const ENTT_NOEXCEPT {
    260  return cend();
    261  }
    262 
    264  iterator_type end() ENTT_NOEXCEPT {
    265  return iterator_type{&instances, {}};
    266  }
    267 
    280  const object_type & get(const entity_type entt) const ENTT_NOEXCEPT {
    281  return instances[underlying_type::index(entt)];
    282  }
    283 
    285  object_type & get(const entity_type entt) ENTT_NOEXCEPT {
    286  return const_cast<object_type &>(std::as_const(*this).get(entt));
    287  }
    288 
    294  const object_type * try_get(const entity_type entt) const ENTT_NOEXCEPT {
    295  return underlying_type::has(entt) ? (instances.data() + underlying_type::index(entt)) : nullptr;
    296  }
    297 
    299  object_type * try_get(const entity_type entt) ENTT_NOEXCEPT {
    300  return const_cast<object_type *>(std::as_const(*this).try_get(entt));
    301  }
    302 
    321  template<typename... Args>
    322  object_type & construct(const entity_type entt, Args &&... args) {
    323  if constexpr(std::is_aggregate_v<object_type>) {
    324  instances.emplace_back(Type{std::forward<Args>(args)...});
    325  } else {
    326  instances.emplace_back(std::forward<Args>(args)...);
    327  }
    328 
    329  // entity goes after component in case constructor throws
    331  return instances.back();
    332  }
    333 
    355  template<typename It, typename... Args>
    356  iterator_type batch(It first, It last, Args &&... args) {
    357  if constexpr(sizeof...(Args) == 0) {
    358  instances.resize(instances.size() + std::distance(first, last));
    359  } else {
    360  instances.resize(instances.size() + std::distance(first, last), Type{std::forward<Args>(args)...});
    361  }
    362 
    363  // entity goes after component in case constructor throws
    364  underlying_type::batch(first, last);
    365  return begin();
    366  }
    367 
    379  void destroy(const entity_type entt) {
    380  auto other = std::move(instances.back());
    381  instances[underlying_type::index(entt)] = std::move(other);
    382  instances.pop_back();
    384  }
    385 
    398  void swap(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT override {
    399  std::swap(instances[underlying_type::index(lhs)], instances[underlying_type::index(rhs)]);
    400  underlying_type::swap(lhs, rhs);
    401  }
    402 
    448  template<typename Compare, typename Sort = std_sort, typename... Args>
    449  void sort(iterator_type first, iterator_type last, Compare compare, Sort algo = Sort{}, Args &&... args) {
    450  ENTT_ASSERT(!(last < first));
    451  ENTT_ASSERT(!(last > end()));
    452 
    453  const auto from = underlying_type::begin() + std::distance(begin(), first);
    454  const auto to = from + std::distance(first, last);
    455 
    456  const auto apply = [this](const auto lhs, const auto rhs) {
    457  std::swap(instances[underlying_type::index(lhs)], instances[underlying_type::index(rhs)]);
    458  };
    459 
    460  if constexpr(std::is_invocable_v<Compare, const object_type &, const object_type &>) {
    461  underlying_type::arrange(from, to, std::move(apply), [this, compare = std::move(compare)](const auto lhs, const auto rhs) {
    462  return compare(std::as_const(instances[underlying_type::index(lhs)]), std::as_const(instances[underlying_type::index(rhs)]));
    463  }, std::move(algo), std::forward<Args>(args)...);
    464  } else {
    465  underlying_type::arrange(from, to, std::move(apply), std::move(compare), std::move(algo), std::forward<Args>(args)...);
    466  }
    467  }
    468 
    470  void reset() {
    472  instances.clear();
    473  }
    474 
    475 private:
    476  std::vector<object_type> instances;
    477 };
    478 
    479 
    481 template<typename Entity, typename Type>
    482 class basic_storage<Entity, Type, std::enable_if_t<ENTT_ENABLE_ETO(Type)>>: public sparse_set<Entity> {
    485 
    486  class iterator {
    487  friend class basic_storage<Entity, Type>;
    488 
    489  using index_type = typename traits_type::difference_type;
    490 
    491  iterator(const index_type idx) ENTT_NOEXCEPT
    492  : index{idx}
    493  {}
    494 
    495  public:
    496  using difference_type = index_type;
    497  using value_type = Type;
    498  using pointer = const value_type *;
    499  using reference = value_type;
    500  using iterator_category = std::input_iterator_tag;
    501 
    502  iterator() ENTT_NOEXCEPT = default;
    503 
    504  iterator & operator++() ENTT_NOEXCEPT {
    505  return --index, *this;
    506  }
    507 
    508  iterator operator++(int) ENTT_NOEXCEPT {
    509  iterator orig = *this;
    510  return ++(*this), orig;
    511  }
    512 
    513  iterator & operator--() ENTT_NOEXCEPT {
    514  return ++index, *this;
    515  }
    516 
    517  iterator operator--(int) ENTT_NOEXCEPT {
    518  iterator orig = *this;
    519  return --(*this), orig;
    520  }
    521 
    522  iterator & operator+=(const difference_type value) ENTT_NOEXCEPT {
    523  index -= value;
    524  return *this;
    525  }
    526 
    527  iterator operator+(const difference_type value) const ENTT_NOEXCEPT {
    528  return iterator{index-value};
    529  }
    530 
    531  iterator & operator-=(const difference_type value) ENTT_NOEXCEPT {
    532  return (*this += -value);
    533  }
    534 
    535  iterator operator-(const difference_type value) const ENTT_NOEXCEPT {
    536  return (*this + -value);
    537  }
    538 
    539  difference_type operator-(const iterator &other) const ENTT_NOEXCEPT {
    540  return other.index - index;
    541  }
    542 
    543  reference operator[](const difference_type) const ENTT_NOEXCEPT {
    544  return {};
    545  }
    546 
    547  bool operator==(const iterator &other) const ENTT_NOEXCEPT {
    548  return other.index == index;
    549  }
    550 
    551  bool operator!=(const iterator &other) const ENTT_NOEXCEPT {
    552  return !(*this == other);
    553  }
    554 
    555  bool operator<(const iterator &other) const ENTT_NOEXCEPT {
    556  return index > other.index;
    557  }
    558 
    559  bool operator>(const iterator &other) const ENTT_NOEXCEPT {
    560  return index < other.index;
    561  }
    562 
    563  bool operator<=(const iterator &other) const ENTT_NOEXCEPT {
    564  return !(*this > other);
    565  }
    566 
    567  bool operator>=(const iterator &other) const ENTT_NOEXCEPT {
    568  return !(*this < other);
    569  }
    570 
    571  pointer operator->() const ENTT_NOEXCEPT {
    572  return nullptr;
    573  }
    574 
    575  reference operator*() const ENTT_NOEXCEPT {
    576  return {};
    577  }
    578 
    579  private:
    580  index_type index;
    581  };
    582 
    583 public:
    585  using object_type = Type;
    587  using entity_type = Entity;
    589  using size_type = std::size_t;
    591  using iterator_type = iterator;
    592 
    605  iterator_type cbegin() const ENTT_NOEXCEPT {
    606  const typename traits_type::difference_type pos = underlying_type::size();
    607  return iterator_type{pos};
    608  }
    609 
    611  iterator_type begin() const ENTT_NOEXCEPT {
    612  return cbegin();
    613  }
    614 
    629  iterator_type cend() const ENTT_NOEXCEPT {
    630  return iterator_type{};
    631  }
    632 
    634  iterator_type end() const ENTT_NOEXCEPT {
    635  return cend();
    636  }
    637 
    654  object_type get([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT {
    655  ENTT_ASSERT(underlying_type::has(entt));
    656  return {};
    657  }
    658 
    676  template<typename It>
    677  iterator_type batch(It first, It last, const object_type & = {}) {
    678  underlying_type::batch(first, last);
    679  return begin();
    680  }
    681 
    683  template<typename Compare, typename Sort = std_sort, typename... Args>
    684  void sort(iterator_type first, iterator_type last, Compare compare, Sort algo = Sort{}, Args &&... args) {
    685  ENTT_ASSERT(!(last < first));
    686  ENTT_ASSERT(!(last > end()));
    687 
    688  const auto from = underlying_type::begin() + std::distance(begin(), first);
    689  const auto to = from + std::distance(first, last);
    690 
    691  underlying_type::sort(from, to, std::move(compare), std::move(algo), std::forward<Args>(args)...);
    692  }
    693 };
    694 
    696 template<typename Entity, typename Type>
    697 struct storage: basic_storage<Entity, Type> {};
    698 
    699 
    700 }
    701 
    702 
    703 #endif // ENTT_ENTITY_STORAGE_HPP
    void arrange(iterator_type first, iterator_type last, Apply apply, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: sparse_set.hpp:562
    -
    iterator_type cend() const ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: storage.hpp:629
    -
    void shrink_to_fit()
    Requests the removal of unused capacity.
    Definition: sparse_set.hpp:248
    -
    Type object_type
    Type of the objects associated with the entities.
    Definition: storage.hpp:585
    -
    void swap(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT override
    Swaps entities and objects in the internal packed arrays.
    Definition: storage.hpp:398
    -
    Basic sparse set implementation.
    Definition: sparse_set.hpp:50
    -
    iterator< true > const_iterator_type
    Constant random access iterator type.
    Definition: storage.hpp:167
    -
    void reserve(const size_type cap)
    Increases the capacity of a sparse set.
    Definition: sparse_set.hpp:234
    -
    const object_type * try_get(const entity_type entt) const ENTT_NOEXCEPT
    Returns a pointer to the object associated with an entity, if any.
    Definition: storage.hpp:294
    -
    size_type size() const ENTT_NOEXCEPT
    Returns the number of elements in a sparse set.
    Definition: sparse_set.hpp:282
    -
    object_type & construct(const entity_type entt, Args &&... args)
    Assigns an entity to a storage and constructs its object.
    Definition: storage.hpp:322
    -
    constexpr bool operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT
    Compares two hashed strings.
    -
    const_iterator_type end() const ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: storage.hpp:259
    -
    std::size_t size_type
    Unsigned integer type.
    Definition: storage.hpp:163
    -
    void batch(It first, It last)
    Assigns one or more entities to a sparse set.
    Definition: sparse_set.hpp:421
    -
    iterator_type batch(It first, It last, const object_type &={})
    Assigns one or more entities to a storage.
    Definition: storage.hpp:677
    -
    iterator_type begin() ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: storage.hpp:235
    -
    EnTT default namespace.
    Definition: algorithm.hpp:12
    -
    bool has(const entity_type entt) const ENTT_NOEXCEPT
    Checks if a sparse set contains an entity.
    Definition: sparse_set.hpp:364
    -
    std::size_t size_type
    Unsigned integer type.
    Definition: sparse_set.hpp:180
    -
    size_type index(const entity_type entt) const ENTT_NOEXCEPT
    Returns the position of an entity in a sparse set.
    Definition: sparse_set.hpp:382
    -
    void reserve(const size_type cap)
    Increases the capacity of a storage.
    Definition: storage.hpp:177
    -
    void destroy(const entity_type entt)
    Removes an entity from a sparse set.
    Definition: sparse_set.hpp:443
    -
    Basic storage implementation.
    Definition: storage.hpp:697
    -
    iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: sparse_set.hpp:326
    -
    const_iterator_type cbegin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: storage.hpp:224
    -
    const_iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: storage.hpp:230
    -
    void sort(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: sparse_set.hpp:517
    -
    Basic storage implementation.
    Definition: storage.hpp:51
    -
    entity_type entity_type
    Underlying entity identifier.
    Definition: sparse_set.hpp:178
    -
    object_type * try_get(const entity_type entt) ENTT_NOEXCEPT
    Returns a pointer to the object associated with an entity, if any.
    Definition: storage.hpp:299
    -
    Function object to wrap std::sort in a class type.
    Definition: algorithm.hpp:23
    -
    object_type * raw() ENTT_NOEXCEPT
    Direct access to the array of objects.
    Definition: storage.hpp:208
    -
    void shrink_to_fit()
    Requests the removal of unused capacity.
    Definition: storage.hpp:183
    -
    iterator_type end() ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: storage.hpp:264
    -
    void sort(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: storage.hpp:684
    -
    payload_type object_type
    Type of the objects associated with the entities.
    Definition: storage.hpp:159
    -
    iterator_type batch(It first, It last, Args &&... args)
    Assigns one or more entities to a storage and default constructs or copy constructs their objects...
    Definition: storage.hpp:356
    -
    const_iterator_type cend() const ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: storage.hpp:254
    -
    const object_type * raw() const ENTT_NOEXCEPT
    Direct access to the array of objects.
    Definition: storage.hpp:203
    -
    iterator_type cbegin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: storage.hpp:605
    -
    virtual void swap(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT
    Swaps two entities in the internal packed array.
    Definition: sparse_set.hpp:468
    -
    void sort(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: storage.hpp:449
    -
    iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: storage.hpp:611
    -
    void reset()
    Resets a sparse set.
    Definition: sparse_set.hpp:630
    -
    void destroy(const entity_type entt)
    Removes an entity from a storage and destroys its object.
    Definition: storage.hpp:379
    -
    iterator_type end() const ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: storage.hpp:634
    -
    void reset()
    Resets a storage.
    Definition: storage.hpp:470
    -
    Entity traits.
    Definition: entity.hpp:20
    -
    iterator iterator_type
    Random access iterator type.
    Definition: sparse_set.hpp:182
    -
    void construct(const entity_type entt)
    Assigns an entity to a sparse set.
    Definition: sparse_set.hpp:399
    +
    1 #ifndef ENTT_ENTITY_STORAGE_HPP
    +
    2 #define ENTT_ENTITY_STORAGE_HPP
    +
    3 
    +
    4 
    +
    5 #include <algorithm>
    +
    6 #include <iterator>
    +
    7 #include <numeric>
    +
    8 #include <utility>
    +
    9 #include <vector>
    +
    10 #include <cstddef>
    +
    11 #include <type_traits>
    +
    12 #include "../config/config.h"
    +
    13 #include "../core/algorithm.hpp"
    +
    14 #include "sparse_set.hpp"
    +
    15 #include "entity.hpp"
    +
    16 
    +
    17 
    +
    18 namespace entt {
    +
    19 
    +
    20 
    +
    50 template<typename Entity, typename Type, typename = std::void_t<>>
    +
    51 class basic_storage: public sparse_set<Entity> {
    + + +
    54 
    +
    55  template<bool Const>
    +
    56  class iterator {
    +
    57  friend class basic_storage<Entity, Type>;
    +
    58 
    +
    59  using instance_type = std::conditional_t<Const, const std::vector<Type>, std::vector<Type>>;
    +
    60  using index_type = typename traits_type::difference_type;
    +
    61 
    +
    62  iterator(instance_type *ref, const index_type idx) ENTT_NOEXCEPT
    +
    63  : instances{ref}, index{idx}
    +
    64  {}
    +
    65 
    +
    66  public:
    +
    67  using difference_type = index_type;
    +
    68  using value_type = Type;
    +
    69  using pointer = std::conditional_t<Const, const value_type *, value_type *>;
    +
    70  using reference = std::conditional_t<Const, const value_type &, value_type &>;
    +
    71  using iterator_category = std::random_access_iterator_tag;
    +
    72 
    +
    73  iterator() ENTT_NOEXCEPT = default;
    +
    74 
    +
    75  iterator & operator++() ENTT_NOEXCEPT {
    +
    76  return --index, *this;
    +
    77  }
    +
    78 
    +
    79  iterator operator++(int) ENTT_NOEXCEPT {
    +
    80  iterator orig = *this;
    +
    81  return ++(*this), orig;
    +
    82  }
    +
    83 
    +
    84  iterator & operator--() ENTT_NOEXCEPT {
    +
    85  return ++index, *this;
    +
    86  }
    +
    87 
    +
    88  iterator operator--(int) ENTT_NOEXCEPT {
    +
    89  iterator orig = *this;
    +
    90  return --(*this), orig;
    +
    91  }
    +
    92 
    +
    93  iterator & operator+=(const difference_type value) ENTT_NOEXCEPT {
    +
    94  index -= value;
    +
    95  return *this;
    +
    96  }
    +
    97 
    +
    98  iterator operator+(const difference_type value) const ENTT_NOEXCEPT {
    +
    99  return iterator{instances, index-value};
    +
    100  }
    +
    101 
    +
    102  iterator & operator-=(const difference_type value) ENTT_NOEXCEPT {
    +
    103  return (*this += -value);
    +
    104  }
    +
    105 
    +
    106  iterator operator-(const difference_type value) const ENTT_NOEXCEPT {
    +
    107  return (*this + -value);
    +
    108  }
    +
    109 
    +
    110  difference_type operator-(const iterator &other) const ENTT_NOEXCEPT {
    +
    111  return other.index - index;
    +
    112  }
    +
    113 
    +
    114  reference operator[](const difference_type value) const ENTT_NOEXCEPT {
    +
    115  const auto pos = size_type(index-value-1);
    +
    116  return (*instances)[pos];
    +
    117  }
    +
    118 
    +
    119  bool operator==(const iterator &other) const ENTT_NOEXCEPT {
    +
    120  return other.index == index;
    +
    121  }
    +
    122 
    +
    123  bool operator!=(const iterator &other) const ENTT_NOEXCEPT {
    +
    124  return !(*this == other);
    +
    125  }
    +
    126 
    +
    127  bool operator<(const iterator &other) const ENTT_NOEXCEPT {
    +
    128  return index > other.index;
    +
    129  }
    +
    130 
    +
    131  bool operator>(const iterator &other) const ENTT_NOEXCEPT {
    +
    132  return index < other.index;
    +
    133  }
    +
    134 
    +
    135  bool operator<=(const iterator &other) const ENTT_NOEXCEPT {
    +
    136  return !(*this > other);
    +
    137  }
    +
    138 
    +
    139  bool operator>=(const iterator &other) const ENTT_NOEXCEPT {
    +
    140  return !(*this < other);
    +
    141  }
    +
    142 
    +
    143  pointer operator->() const ENTT_NOEXCEPT {
    +
    144  const auto pos = size_type(index-1);
    +
    145  return &(*instances)[pos];
    +
    146  }
    +
    147 
    +
    148  reference operator*() const ENTT_NOEXCEPT {
    +
    149  return *operator->();
    +
    150  }
    +
    151 
    +
    152  private:
    +
    153  instance_type *instances;
    +
    154  index_type index;
    +
    155  };
    +
    156 
    +
    157 public:
    +
    159  using object_type = Type;
    +
    161  using entity_type = Entity;
    +
    163  using size_type = std::size_t;
    +
    165  using iterator_type = iterator<false>;
    +
    167  using const_iterator_type = iterator<true>;
    +
    168 
    +
    177  void reserve(const size_type cap) {
    + +
    179  instances.reserve(cap);
    +
    180  }
    +
    181 
    +
    183  void shrink_to_fit() {
    + +
    185  instances.shrink_to_fit();
    +
    186  }
    +
    187 
    +
    203  const object_type * raw() const ENTT_NOEXCEPT {
    +
    204  return instances.data();
    +
    205  }
    +
    206 
    +
    208  object_type * raw() ENTT_NOEXCEPT {
    +
    209  return const_cast<object_type *>(std::as_const(*this).raw());
    +
    210  }
    +
    211 
    +
    224  const_iterator_type cbegin() const ENTT_NOEXCEPT {
    +
    225  const typename traits_type::difference_type pos = underlying_type::size();
    +
    226  return const_iterator_type{&instances, pos};
    +
    227  }
    +
    228 
    +
    230  const_iterator_type begin() const ENTT_NOEXCEPT {
    +
    231  return cbegin();
    +
    232  }
    +
    233 
    +
    235  iterator_type begin() ENTT_NOEXCEPT {
    +
    236  const typename traits_type::difference_type pos = underlying_type::size();
    +
    237  return iterator_type{&instances, pos};
    +
    238  }
    +
    239 
    +
    254  const_iterator_type cend() const ENTT_NOEXCEPT {
    +
    255  return const_iterator_type{&instances, {}};
    +
    256  }
    +
    257 
    +
    259  const_iterator_type end() const ENTT_NOEXCEPT {
    +
    260  return cend();
    +
    261  }
    +
    262 
    +
    264  iterator_type end() ENTT_NOEXCEPT {
    +
    265  return iterator_type{&instances, {}};
    +
    266  }
    +
    267 
    +
    280  const object_type & get(const entity_type entt) const ENTT_NOEXCEPT {
    +
    281  return instances[underlying_type::index(entt)];
    +
    282  }
    +
    283 
    +
    285  object_type & get(const entity_type entt) ENTT_NOEXCEPT {
    +
    286  return const_cast<object_type &>(std::as_const(*this).get(entt));
    +
    287  }
    +
    288 
    +
    294  const object_type * try_get(const entity_type entt) const ENTT_NOEXCEPT {
    +
    295  return underlying_type::has(entt) ? (instances.data() + underlying_type::index(entt)) : nullptr;
    +
    296  }
    +
    297 
    +
    299  object_type * try_get(const entity_type entt) ENTT_NOEXCEPT {
    +
    300  return const_cast<object_type *>(std::as_const(*this).try_get(entt));
    +
    301  }
    +
    302 
    +
    321  template<typename... Args>
    +
    322  object_type & construct(const entity_type entt, Args &&... args) {
    +
    323  if constexpr(std::is_aggregate_v<object_type>) {
    +
    324  instances.emplace_back(Type{std::forward<Args>(args)...});
    +
    325  } else {
    +
    326  instances.emplace_back(std::forward<Args>(args)...);
    +
    327  }
    +
    328 
    +
    329  // entity goes after component in case constructor throws
    + +
    331  return instances.back();
    +
    332  }
    +
    333 
    +
    355  template<typename It, typename... Args>
    +
    356  iterator_type batch(It first, It last, Args &&... args) {
    +
    357  if constexpr(sizeof...(Args) == 0) {
    +
    358  instances.resize(instances.size() + std::distance(first, last));
    +
    359  } else {
    +
    360  instances.resize(instances.size() + std::distance(first, last), Type{std::forward<Args>(args)...});
    +
    361  }
    +
    362 
    +
    363  // entity goes after component in case constructor throws
    +
    364  underlying_type::batch(first, last);
    +
    365  return begin();
    +
    366  }
    +
    367 
    +
    379  void destroy(const entity_type entt) {
    +
    380  auto other = std::move(instances.back());
    +
    381  instances[underlying_type::index(entt)] = std::move(other);
    +
    382  instances.pop_back();
    + +
    384  }
    +
    385 
    +
    398  void swap(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT override {
    +
    399  std::swap(instances[underlying_type::index(lhs)], instances[underlying_type::index(rhs)]);
    +
    400  underlying_type::swap(lhs, rhs);
    +
    401  }
    +
    402 
    +
    448  template<typename Compare, typename Sort = std_sort, typename... Args>
    +
    449  void sort(iterator_type first, iterator_type last, Compare compare, Sort algo = Sort{}, Args &&... args) {
    +
    450  ENTT_ASSERT(!(last < first));
    +
    451  ENTT_ASSERT(!(last > end()));
    +
    452 
    +
    453  const auto from = underlying_type::begin() + std::distance(begin(), first);
    +
    454  const auto to = from + std::distance(first, last);
    +
    455 
    +
    456  const auto apply = [this](const auto lhs, const auto rhs) {
    +
    457  std::swap(instances[underlying_type::index(lhs)], instances[underlying_type::index(rhs)]);
    +
    458  };
    +
    459 
    +
    460  if constexpr(std::is_invocable_v<Compare, const object_type &, const object_type &>) {
    +
    461  underlying_type::arrange(from, to, std::move(apply), [this, compare = std::move(compare)](const auto lhs, const auto rhs) {
    +
    462  return compare(std::as_const(instances[underlying_type::index(lhs)]), std::as_const(instances[underlying_type::index(rhs)]));
    +
    463  }, std::move(algo), std::forward<Args>(args)...);
    +
    464  } else {
    +
    465  underlying_type::arrange(from, to, std::move(apply), std::move(compare), std::move(algo), std::forward<Args>(args)...);
    +
    466  }
    +
    467  }
    +
    468 
    +
    470  void reset() {
    + +
    472  instances.clear();
    +
    473  }
    +
    474 
    +
    475 private:
    +
    476  std::vector<object_type> instances;
    +
    477 };
    +
    478 
    +
    479 
    +
    481 template<typename Entity, typename Type>
    +
    482 class basic_storage<Entity, Type, std::enable_if_t<ENTT_ENABLE_ETO(Type)>>: public sparse_set<Entity> {
    + + +
    485 
    +
    486  class iterator {
    +
    487  friend class basic_storage<Entity, Type>;
    +
    488 
    +
    489  using index_type = typename traits_type::difference_type;
    +
    490 
    +
    491  iterator(const index_type idx) ENTT_NOEXCEPT
    +
    492  : index{idx}
    +
    493  {}
    +
    494 
    +
    495  public:
    +
    496  using difference_type = index_type;
    +
    497  using value_type = Type;
    +
    498  using pointer = const value_type *;
    +
    499  using reference = value_type;
    +
    500  using iterator_category = std::input_iterator_tag;
    +
    501 
    +
    502  iterator() ENTT_NOEXCEPT = default;
    +
    503 
    +
    504  iterator & operator++() ENTT_NOEXCEPT {
    +
    505  return --index, *this;
    +
    506  }
    +
    507 
    +
    508  iterator operator++(int) ENTT_NOEXCEPT {
    +
    509  iterator orig = *this;
    +
    510  return ++(*this), orig;
    +
    511  }
    +
    512 
    +
    513  iterator & operator--() ENTT_NOEXCEPT {
    +
    514  return ++index, *this;
    +
    515  }
    +
    516 
    +
    517  iterator operator--(int) ENTT_NOEXCEPT {
    +
    518  iterator orig = *this;
    +
    519  return --(*this), orig;
    +
    520  }
    +
    521 
    +
    522  iterator & operator+=(const difference_type value) ENTT_NOEXCEPT {
    +
    523  index -= value;
    +
    524  return *this;
    +
    525  }
    +
    526 
    +
    527  iterator operator+(const difference_type value) const ENTT_NOEXCEPT {
    +
    528  return iterator{index-value};
    +
    529  }
    +
    530 
    +
    531  iterator & operator-=(const difference_type value) ENTT_NOEXCEPT {
    +
    532  return (*this += -value);
    +
    533  }
    +
    534 
    +
    535  iterator operator-(const difference_type value) const ENTT_NOEXCEPT {
    +
    536  return (*this + -value);
    +
    537  }
    +
    538 
    +
    539  difference_type operator-(const iterator &other) const ENTT_NOEXCEPT {
    +
    540  return other.index - index;
    +
    541  }
    +
    542 
    +
    543  reference operator[](const difference_type) const ENTT_NOEXCEPT {
    +
    544  return {};
    +
    545  }
    +
    546 
    +
    547  bool operator==(const iterator &other) const ENTT_NOEXCEPT {
    +
    548  return other.index == index;
    +
    549  }
    +
    550 
    +
    551  bool operator!=(const iterator &other) const ENTT_NOEXCEPT {
    +
    552  return !(*this == other);
    +
    553  }
    +
    554 
    +
    555  bool operator<(const iterator &other) const ENTT_NOEXCEPT {
    +
    556  return index > other.index;
    +
    557  }
    +
    558 
    +
    559  bool operator>(const iterator &other) const ENTT_NOEXCEPT {
    +
    560  return index < other.index;
    +
    561  }
    +
    562 
    +
    563  bool operator<=(const iterator &other) const ENTT_NOEXCEPT {
    +
    564  return !(*this > other);
    +
    565  }
    +
    566 
    +
    567  bool operator>=(const iterator &other) const ENTT_NOEXCEPT {
    +
    568  return !(*this < other);
    +
    569  }
    +
    570 
    +
    571  pointer operator->() const ENTT_NOEXCEPT {
    +
    572  return nullptr;
    +
    573  }
    +
    574 
    +
    575  reference operator*() const ENTT_NOEXCEPT {
    +
    576  return {};
    +
    577  }
    +
    578 
    +
    579  private:
    +
    580  index_type index;
    +
    581  };
    +
    582 
    +
    583 public:
    +
    585  using object_type = Type;
    +
    587  using entity_type = Entity;
    +
    589  using size_type = std::size_t;
    +
    591  using iterator_type = iterator;
    +
    592 
    +
    605  iterator_type cbegin() const ENTT_NOEXCEPT {
    +
    606  const typename traits_type::difference_type pos = underlying_type::size();
    +
    607  return iterator_type{pos};
    +
    608  }
    +
    609 
    +
    611  iterator_type begin() const ENTT_NOEXCEPT {
    +
    612  return cbegin();
    +
    613  }
    +
    614 
    +
    629  iterator_type cend() const ENTT_NOEXCEPT {
    +
    630  return iterator_type{};
    +
    631  }
    +
    632 
    +
    634  iterator_type end() const ENTT_NOEXCEPT {
    +
    635  return cend();
    +
    636  }
    +
    637 
    +
    654  object_type get([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT {
    +
    655  ENTT_ASSERT(underlying_type::has(entt));
    +
    656  return {};
    +
    657  }
    +
    658 
    +
    676  template<typename It>
    +
    677  iterator_type batch(It first, It last, const object_type & = {}) {
    +
    678  underlying_type::batch(first, last);
    +
    679  return begin();
    +
    680  }
    +
    681 
    +
    683  template<typename Compare, typename Sort = std_sort, typename... Args>
    +
    684  void sort(iterator_type first, iterator_type last, Compare compare, Sort algo = Sort{}, Args &&... args) {
    +
    685  ENTT_ASSERT(!(last < first));
    +
    686  ENTT_ASSERT(!(last > end()));
    +
    687 
    +
    688  const auto from = underlying_type::begin() + std::distance(begin(), first);
    +
    689  const auto to = from + std::distance(first, last);
    +
    690 
    +
    691  underlying_type::sort(from, to, std::move(compare), std::move(algo), std::forward<Args>(args)...);
    +
    692  }
    +
    693 };
    +
    694 
    +
    696 template<typename Entity, typename Type>
    +
    697 struct storage: basic_storage<Entity, Type> {};
    +
    698 
    +
    699 
    +
    700 }
    +
    701 
    +
    702 
    +
    703 #endif // ENTT_ENTITY_STORAGE_HPP
    +
    iterator_type batch(It first, It last, const object_type &={})
    Assigns one or more entities to a storage.
    Definition: storage.hpp:677
    +
    iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: sparse_set.hpp:326
    +
    object_type * try_get(const entity_type entt) ENTT_NOEXCEPT
    Returns a pointer to the object associated with an entity, if any.
    Definition: storage.hpp:299
    +
    object_type * raw() ENTT_NOEXCEPT
    Direct access to the array of objects.
    Definition: storage.hpp:208
    +
    iterator_type end() ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: storage.hpp:264
    +
    const_iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: storage.hpp:230
    +
    Basic sparse set implementation.
    Definition: sparse_set.hpp:50
    +
    iterator_type cbegin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: storage.hpp:605
    +
    void shrink_to_fit()
    Requests the removal of unused capacity.
    Definition: storage.hpp:183
    +
    void destroy(const entity_type entt)
    Removes an entity from a storage and destroys its object.
    Definition: storage.hpp:379
    +
    const object_type * raw() const ENTT_NOEXCEPT
    Direct access to the array of objects.
    Definition: storage.hpp:203
    +
    iterator_type batch(It first, It last, Args &&... args)
    Assigns one or more entities to a storage and default constructs or copy constructs their objects.
    Definition: storage.hpp:356
    +
    iterator_type begin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: storage.hpp:611
    +
    void sort(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: sparse_set.hpp:517
    +
    void sort(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: storage.hpp:449
    +
    const_iterator_type cend() const ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: storage.hpp:254
    +
    Basic storage implementation.
    Definition: storage.hpp:51
    +
    payload_type object_type
    Type of the objects associated with the entities.
    Definition: storage.hpp:159
    +
    void sort(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: storage.hpp:684
    +
    const object_type * try_get(const entity_type entt) const ENTT_NOEXCEPT
    Returns a pointer to the object associated with an entity, if any.
    Definition: storage.hpp:294
    +
    iterator_type cend() const ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: storage.hpp:629
    +
    void reset()
    Resets a storage.
    Definition: storage.hpp:470
    +
    void shrink_to_fit()
    Requests the removal of unused capacity.
    Definition: sparse_set.hpp:248
    +
    void destroy(const entity_type entt)
    Removes an entity from a sparse set.
    Definition: sparse_set.hpp:443
    +
    EnTT default namespace.
    Definition: algorithm.hpp:12
    +
    object_type & get(const entity_type entt) ENTT_NOEXCEPT
    Returns the object associated with an entity.
    Definition: storage.hpp:285
    +
    void swap(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT override
    Swaps entities and objects in the internal packed arrays.
    Definition: storage.hpp:398
    +
    iterator_type end() const ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: storage.hpp:634
    +
    iterator_type begin() ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: storage.hpp:235
    +
    size_type index(const entity_type entt) const ENTT_NOEXCEPT
    Returns the position of an entity in a sparse set.
    Definition: sparse_set.hpp:382
    +
    std::size_t size_type
    Unsigned integer type.
    Definition: sparse_set.hpp:180
    +
    void construct(const entity_type entt)
    Assigns an entity to a sparse set.
    Definition: sparse_set.hpp:399
    +
    constexpr bool operator!=(const basic_hashed_string< Char > &lhs, const basic_hashed_string< Char > &rhs) ENTT_NOEXCEPT
    Compares two hashed strings.
    +
    std::size_t size_type
    Unsigned integer type.
    Definition: storage.hpp:163
    +
    Basic storage implementation.
    Definition: storage.hpp:697
    +
    size_type size() const ENTT_NOEXCEPT
    Returns the number of elements in a sparse set.
    Definition: sparse_set.hpp:282
    +
    const_iterator_type cbegin() const ENTT_NOEXCEPT
    Returns an iterator to the beginning.
    Definition: storage.hpp:224
    +
    Type object_type
    Type of the objects associated with the entities.
    Definition: storage.hpp:585
    +
    object_type get([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT
    Returns the object associated with an entity.
    Definition: storage.hpp:654
    +
    bool has(const entity_type entt) const ENTT_NOEXCEPT
    Checks if a sparse set contains an entity.
    Definition: sparse_set.hpp:364
    +
    void batch(It first, It last)
    Assigns one or more entities to a sparse set.
    Definition: sparse_set.hpp:421
    +
    void reset()
    Resets a sparse set.
    Definition: sparse_set.hpp:630
    +
    Entity traits.
    Definition: entity.hpp:20
    +
    iterator< true > const_iterator_type
    Constant random access iterator type.
    Definition: storage.hpp:167
    +
    const_iterator_type end() const ENTT_NOEXCEPT
    Returns an iterator to the end.
    Definition: storage.hpp:259
    +
    const object_type & get(const entity_type entt) const ENTT_NOEXCEPT
    Returns the object associated with an entity.
    Definition: storage.hpp:280
    +
    void reserve(const size_type cap)
    Increases the capacity of a sparse set.
    Definition: sparse_set.hpp:234
    +
    object_type & construct(const entity_type entt, Args &&... args)
    Assigns an entity to a storage and constructs its object.
    Definition: storage.hpp:322
    +
    entity_type entity_type
    Underlying entity identifier.
    Definition: sparse_set.hpp:178
    +
    void reserve(const size_type cap)
    Increases the capacity of a storage.
    Definition: storage.hpp:177
    +
    iterator iterator_type
    Random access iterator type.
    Definition: sparse_set.hpp:182
    +
    void arrange(iterator_type first, iterator_type last, Apply apply, Compare compare, Sort algo=Sort{}, Args &&... args)
    Sort elements according to the given comparison function.
    Definition: sparse_set.hpp:562
    +
    virtual void swap(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT
    Swaps two entities in the internal packed array.
    Definition: sparse_set.hpp:468
    +
    Function object to wrap std::sort in a class type.
    Definition: algorithm.hpp:23
    diff --git a/structentt_1_1as__alias__t.html b/structentt_1_1as__alias__t.html index 1344b233f..c1bec6785 100644 --- a/structentt_1_1as__alias__t.html +++ b/structentt_1_1as__alias__t.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::as_alias_t Struct Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

     as_group (registry_type &source) ENTT_NOEXCEPT - Constructs a converter for a given registry. More...
    + Constructs a converter for a given registry. More...
      template<typename Exclude , typename Get , typename... Owned>  operator entt::basic_group< Entity, Exclude, Get, Owned... > () const - Conversion function from a registry to a group. More...
    + Conversion function from a registry to a group. More...
     

    Detailed Description

    @@ -102,7 +105,7 @@ struct entt::as_group< Const, Entity >
    Template Parameters
    - +
    ConstConstness of the accepted registry.
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -149,7 +152,7 @@ template<bool Const, typename Entity >

    Member Function Documentation

    -

    ◆ operator entt::basic_group< Entity, Exclude, Get, Owned... >()

    +

    ◆ operator entt::basic_group< Entity, Exclude, Get, Owned... >()

    @@ -198,7 +201,7 @@ template<typename Exclude , typename Get , typename... Owned>
    diff --git a/structentt_1_1as__is__t.html b/structentt_1_1as__is__t.html index 6ebb32dea..920dfc1c8 100644 --- a/structentt_1_1as__is__t.html +++ b/structentt_1_1as__is__t.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::as_is_t Struct Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

     as_view (registry_type &source) ENTT_NOEXCEPT - Constructs a converter for a given registry. More...
    + Constructs a converter for a given registry. More...
      template<typename Exclude , typename... Component>  operator entt::basic_view< Entity, Exclude, Component... > () const - Conversion function from a registry to a view. More...
    + Conversion function from a registry to a view. More...
     

    Detailed Description

    @@ -102,7 +105,7 @@ struct entt::as_view< Const, Entity >
    Template Parameters
    - +
    ConstConstness of the accepted registry.
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -149,7 +152,7 @@ template<bool Const, typename Entity >

    Member Function Documentation

    -

    ◆ operator entt::basic_view< Entity, Exclude, Component... >()

    +

    ◆ operator entt::basic_view< Entity, Exclude, Component... >()

    @@ -197,7 +200,7 @@ template<typename Exclude , typename... Component>
    diff --git a/structentt_1_1as__void__t.html b/structentt_1_1as__void__t.html index 04c0851d0..175bf3630 100644 --- a/structentt_1_1as__void__t.html +++ b/structentt_1_1as__void__t.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::as_void_t Struct Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

     basic_actor (registry_type &ref) - Constructs an actor from a given registry. More...
    + Constructs an actor from a given registry. More...
       basic_actor (entity_type entity, registry_type &ref) - Constructs an actor from a given entity. More...
    + Constructs an actor from a given entity. More...
      virtual ~basic_actor ()  Default destructor.
       basic_actor (basic_actor &&other) - Move constructor. More...
    + Move constructor. More...
      basic_actoroperator= (basic_actor &&other) - Move assignment operator. More...
    + Move assignment operator. More...
      template<typename Component , typename... Args> decltype(auto) assign (Args &&... args) - Assigns the given component to an actor. More...
    + Assigns the given component to an actor. More...
      template<typename Component > void remove () - Removes the given component from an actor. More...
    + Removes the given component from an actor. More...
      template<typename... Component> bool has () const ENTT_NOEXCEPT - Checks if an actor has the given components. More...
    + Checks if an actor has the given components. More...
      template<typename... Component> decltype(auto) get () const ENTT_NOEXCEPT - Returns references to the given components for an actor. More...
    + Returns references to the given components for an actor. More...
      template<typename... Component> decltype(auto) get () ENTT_NOEXCEPT - Returns references to the given components for an actor. More...
    + Returns references to the given components for an actor. More...
      template<typename... Component> auto try_get () const ENTT_NOEXCEPT - Returns pointers to the given components for an actor. More...
    + Returns pointers to the given components for an actor. More...
      template<typename... Component> auto try_get () ENTT_NOEXCEPT - Returns pointers to the given components for an actor. More...
    + Returns pointers to the given components for an actor. More...
      const registry_typebackend () const ENTT_NOEXCEPT - Returns a reference to the underlying registry. More...
    + Returns a reference to the underlying registry. More...
      registry_typebackend () ENTT_NOEXCEPT - Returns a reference to the underlying registry. More...
    + Returns a reference to the underlying registry. More...
      entity_type entity () const ENTT_NOEXCEPT - Returns the entity associated with an actor. More...
    + Returns the entity associated with an actor. More...
       operator bool () const ENTT_NOEXCEPT - Checks if an actor refers to a valid entity or not. More...
    + Checks if an actor refers to a valid entity or not. More...
     

    Detailed Description

    @@ -155,7 +158,7 @@ struct entt::basic_actor< Entity >

    Tiny wrapper around a registry, for all those users that aren't confident with entity-component-system architecture and prefer to iterate objects directly.

    Template Parameters
    - +
    EntityA valid entity type (see entt_traits for more details).
    EntityA valid entity type (see entt_traits for more details).
    @@ -318,7 +321,7 @@ template<typename Component , typename... Args>

    Assigns the given component to an actor.

    -

    A new instance of the given component is created and initialized with the arguments provided (the component must have a proper constructor or be of aggregate type). Then the component is assigned to the actor.
    +

    A new instance of the given component is created and initialized with the arguments provided (the component must have a proper constructor or be of aggregate type). Then the component is assigned to the actor.
    In case the actor already has a component of the given type, it's replaced with the new one.

    Template Parameters
    @@ -754,7 +757,7 @@ template<typename... Component> diff --git a/structentt_1_1basic__collector.html b/structentt_1_1basic__collector.html index 6fbdc6283..1b6dfc547 100644 --- a/structentt_1_1basic__collector.html +++ b/structentt_1_1basic__collector.html @@ -1,9 +1,9 @@ - + - +EnTT: entt::basic_collector<... > Struct Template Reference @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */
    diff --git a/structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_2946084b83498520c73ff3a9eb022209.html b/structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_2946084b83498520c73ff3a9eb022209.html index eb50ec347..221ccfb58 100644 --- a/structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_2946084b83498520c73ff3a9eb022209.html +++ b/structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_2946084b83498520c73ff3a9eb022209.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ - + +/* @license-end */
    template<typename... AllOf, typename... NoneOf> static constexpr auto group (exclude_t< NoneOf... >={}) ENTT_NOEXCEPT - Adds a grouping matcher to the collector. More...
    + Adds a grouping matcher to the collector. More...
      template<typename AnyOf > static constexpr auto replace () ENTT_NOEXCEPT - Adds an observing matcher to the collector. More...
    + Adds an observing matcher to the collector. More...
      template<typename... AllOf, typename... NoneOf> static constexpr auto where (exclude_t< NoneOf... >={}) ENTT_NOEXCEPT - Updates the filter of the last added matcher. More...
    + Updates the filter of the last added matcher. More...
     

    Detailed Description

    @@ -104,7 +107,7 @@ Static Public Member Functions struct entt::basic_collector< matcher< type_list< Reject... >, type_list< Require... >, Rule... >, Other... >

    Collector.

    -

    A collector contains a set of rules (literally, matchers) to use to track entities.
    +

    A collector contains a set of rules (literally, matchers) to use to track entities.
    Its main purpose is to generate a descriptor that allows an observer to know how to connect to a registry.

    Template Parameters
    @@ -140,7 +143,7 @@ template<typename... AllOf, typename... NoneOf>
    RejectUntracked types used to filter out entities.
    -inlinestatic +inlinestaticconstexpr
    @@ -181,7 +184,7 @@ template<typename AnyOf >
    -inlinestatic +inlinestaticconstexpr
    @@ -222,7 +225,7 @@ template<typename... AllOf, typename... NoneOf>
    -inlinestatic +inlinestaticconstexpr
    @@ -249,7 +252,7 @@ template<typename... AllOf, typename... NoneOf>
    diff --git a/structentt_1_1basic__collector_3_4-members.html b/structentt_1_1basic__collector_3_4-members.html index 95b1f92d3..a09c3bce9 100644 --- a/structentt_1_1basic__collector_3_4-members.html +++ b/structentt_1_1basic__collector_3_4-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */
    template<typename... AllOf, typename... NoneOf> static constexpr auto group (exclude_t< NoneOf... >={}) ENTT_NOEXCEPT - Adds a grouping matcher to the collector. More...
    + Adds a grouping matcher to the collector. More...
      template<typename AnyOf > static constexpr auto replace () ENTT_NOEXCEPT - Adds an observing matcher to the collector. More...
    + Adds an observing matcher to the collector. More...
     

    Detailed Description

    @@ -92,7 +95,7 @@ Static Public Member Functions struct entt::basic_collector<>

    Collector.

    -

    A collector contains a set of rules (literally, matchers) to use to track entities.
    +

    A collector contains a set of rules (literally, matchers) to use to track entities.
    Its main purpose is to generate a descriptor that allows an observer to know how to connect to a registry.

    Definition at line 46 of file observer.hpp.

    @@ -118,7 +121,7 @@ template<typename... AllOf, typename... NoneOf>
    -inlinestatic +inlinestaticconstexpr
    @@ -157,7 +160,7 @@ template<typename AnyOf >
    -inlinestatic +inlinestaticconstexpr
    @@ -183,7 +186,7 @@ template<typename AnyOf >
    diff --git a/structentt_1_1cache-members.html b/structentt_1_1cache-members.html index eb69b36fc..060838954 100644 --- a/structentt_1_1cache-members.html +++ b/structentt_1_1cache-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */
     Default move constructor.
      cacheoperator= (cache &&)=default - Default move assignment operator. More...
    + Default move assignment operator. More...
      size_type size () const ENTT_NOEXCEPT - Number of resources managed by a cache. More...
    + Number of resources managed by a cache. More...
      bool empty () const ENTT_NOEXCEPT - Returns true if a cache contains no resources, false otherwise. More...
    + Returns true if a cache contains no resources, false otherwise. More...
      void clear () ENTT_NOEXCEPT - Clears a cache and discards all its resources. More...
    + Clears a cache and discards all its resources. More...
      template<typename Loader , typename... Args> entt::handle< Resource > load (const id_type id, Args &&... args) - Loads the resource that corresponds to a given identifier. More...
    + Loads the resource that corresponds to a given identifier. More...
      template<typename Loader , typename... Args> entt::handle< Resource > reload (const id_type id, Args &&... args) - Reloads a resource or loads it for the first time if not present. More...
    + Reloads a resource or loads it for the first time if not present. More...
      template<typename Loader , typename... Args> entt::handle< Resource > temp (Args &&... args) const - Creates a temporary handle for a resource. More...
    + Creates a temporary handle for a resource. More...
      entt::handle< Resource > handle (const id_type id) const - Creates a handle for a given resource identifier. More...
    + Creates a handle for a given resource identifier. More...
      bool contains (const id_type id) const ENTT_NOEXCEPT - Checks if a cache contains a given identifier. More...
    + Checks if a cache contains a given identifier. More...
      void discard (const id_type id) ENTT_NOEXCEPT - Discards the resource that corresponds to a given identifier. More...
    + Discards the resource that corresponds to a given identifier. More...
      template<typename Func > void each (Func func) const - Iterates all resources. More...
    + Iterates all resources. More...
     

    Detailed Description

    @@ -294,9 +297,12 @@ template<typename Func >

    Iterates all resources.

    -

    The function object is invoked for each element. It is provided with either the resource identifier, the resource handle or both of them.
    +

    The function object is invoked for each element. It is provided with either the resource identifier, the resource handle or both of them.
    The signature of the function must be equivalent to one of the following forms:

    -
    void(const id_type);
    void(handle<Resource>);
    void(const id_type, handle<Resource>);
    Template Parameters
    +
    void(const id_type);
    +
    void(handle<Resource>);
    +
    void(const id_type, handle<Resource>);
    +
    Template Parameters
    FuncType of the function object to invoke.
    @@ -373,7 +379,7 @@ template<typename Resource>

    Creates a handle for a given resource identifier.

    A resource handle can be in a either valid or invalid state. In other terms, a resource handle is properly initialized with a resource if the cache contains the resource itself. Otherwise the returned handle is uninitialized and accessing it results in undefined behavior.

    -
    See also
    handle
    +
    See also
    handle
    Parameters
    @@ -519,7 +525,9 @@ template<typename Loader , typename... Args>

    Reloads a resource or loads it for the first time if not present.

    Equivalent to the following snippet (pseudocode):

    -
    cache.discard(id);
    cache.load(id, args...);

    Arguments are forwarded directly to the loader in order to construct properly the requested resource.

    +
    cache.discard(id);
    +
    cache.load(id, args...);
    +

    Arguments are forwarded directly to the loader in order to construct properly the requested resource.

    Warning
    If the resource cannot be loaded correctly, the returned handle will be invalid and any use of it will result in undefined behavior.
    Template Parameters
    idUnique resource identifier.
    @@ -626,11 +634,13 @@ template<typename Loader , typename... Args>
  • src/entt/resource/cache.hpp
  • +
    cache()=default
    Default constructor.
    +
    ENTT_ID_TYPE id_type
    Unique identifier type for resources.
    Definition: cache.hpp:35
    diff --git a/structentt_1_1choice__t.html b/structentt_1_1choice__t.html index de26849ab..5dfe64b0b 100644 --- a/structentt_1_1choice__t.html +++ b/structentt_1_1choice__t.html @@ -1,9 +1,9 @@ - + - +EnTT: entt::choice_t< N > Struct Template Reference @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */
    diff --git a/structentt_1_1choice__t_3_010_01_4.html b/structentt_1_1choice__t_3_010_01_4.html index a1eab4497..d080859b9 100644 --- a/structentt_1_1choice__t_3_010_01_4.html +++ b/structentt_1_1choice__t_3_010_01_4.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::choice_t< 0 > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    diff --git a/structentt_1_1connect__arg__t.html b/structentt_1_1connect__arg__t.html index a7232933b..8f77bd73a 100644 --- a/structentt_1_1connect__arg__t.html +++ b/structentt_1_1connect__arg__t.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::connect_arg_t< auto > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    diff --git a/structentt_1_1emitter_1_1connection-members.html b/structentt_1_1emitter_1_1connection-members.html index 6cfe3109e..ee02acee4 100644 --- a/structentt_1_1emitter_1_1connection-members.html +++ b/structentt_1_1emitter_1_1connection-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ - + +/* @license-end */
    Inheritance graph
    + + + +
    [legend]
    Collaboration diagram for entt::emitter< Derived >::connection< Event >:
    Collaboration graph
    + + + +
    [legend]
    - +

    @@ -94,7 +105,7 @@ Public Member Functions

     Default constructor.
     
     connection (typename event_handler< Event >::connection_type conn)
     Creates a connection that wraps its underlying instance. More...
     Creates a connection that wraps its underlying instance. More...
     
    @@ -30,18 +30,21 @@

    @@ -110,7 +121,7 @@ template<typename Event>
    struct entt::emitter< Derived >::connection< Event >

    Generic connection type for events.

    -

    Type of the connection object returned by the event emitter whenever a listener for the given type is registered.
    +

    Type of the connection object returned by the event emitter whenever a listener for the given type is registered.
    It can be used to break connections still in use.

    Template Parameters
    @@ -169,7 +180,7 @@ template<typename Event> diff --git a/structentt_1_1emitter_1_1connection__coll__graph.map b/structentt_1_1emitter_1_1connection__coll__graph.map index cf5f3cec0..9b69e77a0 100644 --- a/structentt_1_1emitter_1_1connection__coll__graph.map +++ b/structentt_1_1emitter_1_1connection__coll__graph.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1emitter_1_1connection__coll__graph.md5 b/structentt_1_1emitter_1_1connection__coll__graph.md5 index 1acfe1c25..6f6639745 100644 --- a/structentt_1_1emitter_1_1connection__coll__graph.md5 +++ b/structentt_1_1emitter_1_1connection__coll__graph.md5 @@ -1 +1 @@ -696261886d2bbaf751e07daa95bf9403 \ No newline at end of file +a6156174ef05716ee3c4ff02fba4b26d \ No newline at end of file diff --git a/structentt_1_1emitter_1_1connection__inherit__graph.map b/structentt_1_1emitter_1_1connection__inherit__graph.map index cf5f3cec0..9b69e77a0 100644 --- a/structentt_1_1emitter_1_1connection__inherit__graph.map +++ b/structentt_1_1emitter_1_1connection__inherit__graph.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1emitter_1_1connection__inherit__graph.md5 b/structentt_1_1emitter_1_1connection__inherit__graph.md5 index 2de6fefcc..6f6639745 100644 --- a/structentt_1_1emitter_1_1connection__inherit__graph.md5 +++ b/structentt_1_1emitter_1_1connection__inherit__graph.md5 @@ -1 +1 @@ -65e3fb447ad2ca961e64fa52565cb0e0 \ No newline at end of file +a6156174ef05716ee3c4ff02fba4b26d \ No newline at end of file diff --git a/structentt_1_1entt__traits.html b/structentt_1_1entt__traits.html index fd1d66c0a..fecef2632 100644 --- a/structentt_1_1entt__traits.html +++ b/structentt_1_1entt__traits.html @@ -1,9 +1,9 @@ - + - +EnTT: entt::entt_traits< typename > Struct Template Reference @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */
    diff --git a/structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4-members.html b/structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4-members.html index 4ed3fb34a..50f6ba3c2 100644 --- a/structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4-members.html +++ b/structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */ - + +/* @license-end */
    diff --git a/structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4-members.html b/structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4-members.html index c17900da0..aefa25642 100644 --- a/structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4-members.html +++ b/structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ - + +/* @license-end */
    diff --git a/structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4-members.html b/structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4-members.html index bc65cc2dd..7b9e96df2 100644 --- a/structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4-members.html +++ b/structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ - + +/* @license-end */
    diff --git a/structentt_1_1exclude__t.html b/structentt_1_1exclude__t.html index e48fdf97d..46874362f 100644 --- a/structentt_1_1exclude__t.html +++ b/structentt_1_1exclude__t.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::exclude_t< Type > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    Inheritance graph
    - + +
    [legend]
    @@ -85,7 +89,8 @@ Collaboration diagram for entt::exclude_t< Type >:
    Collaboration graph
    - + +
    [legend]

    Detailed Description

    @@ -109,7 +114,7 @@ struct entt::exclude_t< Type > diff --git a/structentt_1_1exclude__t__coll__graph.map b/structentt_1_1exclude__t__coll__graph.map index 3d61520e9..f71fb7dad 100644 --- a/structentt_1_1exclude__t__coll__graph.map +++ b/structentt_1_1exclude__t__coll__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/structentt_1_1exclude__t__coll__graph.md5 b/structentt_1_1exclude__t__coll__graph.md5 index f230a25cf..e8db3aab1 100644 --- a/structentt_1_1exclude__t__coll__graph.md5 +++ b/structentt_1_1exclude__t__coll__graph.md5 @@ -1 +1 @@ -b59d3cba3fc4ecfa313d40fb9005acd7 \ No newline at end of file +2a8afac85acfeb099c60075cba4df31e \ No newline at end of file diff --git a/structentt_1_1exclude__t__inherit__graph.map b/structentt_1_1exclude__t__inherit__graph.map index 3d61520e9..f71fb7dad 100644 --- a/structentt_1_1exclude__t__inherit__graph.map +++ b/structentt_1_1exclude__t__inherit__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/structentt_1_1exclude__t__inherit__graph.md5 b/structentt_1_1exclude__t__inherit__graph.md5 index bc4bcddb2..e8db3aab1 100644 --- a/structentt_1_1exclude__t__inherit__graph.md5 +++ b/structentt_1_1exclude__t__inherit__graph.md5 @@ -1 +1 @@ -bea56ce62e8439efd7c0b85da10f7696 \ No newline at end of file +2a8afac85acfeb099c60075cba4df31e \ No newline at end of file diff --git a/structentt_1_1family-members.html b/structentt_1_1family-members.html new file mode 100644 index 000000000..993869bc5 --- /dev/null +++ b/structentt_1_1family-members.html @@ -0,0 +1,85 @@ + + + + + + + +EnTT: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    EnTT +  3.3.0 +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    entt::family< Type, Generator > Member List
    +
    +
    + +

    This is the complete list of members for entt::family< Type, Generator >, including all inherited members.

    + + +
    type() ENTT_NOEXCEPTentt::family< Type, Generator >inlinestatic
    + + + + diff --git a/structentt_1_1family.html b/structentt_1_1family.html new file mode 100644 index 000000000..a25db4356 --- /dev/null +++ b/structentt_1_1family.html @@ -0,0 +1,146 @@ + + + + + + + +EnTT: entt::family< Type, Generator > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    EnTT +  3.3.0 +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    entt::family< Type, Generator > Struct Template Reference
    +
    +
    + +

    Runtime type unique identifier. + More...

    + +

    #include <family.hpp>

    + + + + + +

    +Static Public Member Functions

    static ENTT_ID_TYPE type () ENTT_NOEXCEPT
     Statically generated unique identifier for a given type. More...
     
    +

    Detailed Description

    +

    template<typename Type, typename... Generator>
    +struct entt::family< Type, Generator >

    + +

    Runtime type unique identifier.

    +
    Template Parameters
    + + + +
    TypeType for which to generate an unique identifier.
    GeneratorTags to use to discriminate between different generators.
    +
    +
    + +

    Definition at line 32 of file family.hpp.

    +

    Member Function Documentation

    + +

    ◆ type()

    + +
    +
    +
    +template<typename Type , typename... Generator>
    + + + + + +
    + + + + + + + +
    static ENTT_ID_TYPE entt::family< Type, Generator >::type ()
    +
    +inlinestatic
    +
    + +

    Statically generated unique identifier for a given type.

    +
    Returns
    The runtime unique identifier for the given type.
    + +

    Definition at line 37 of file family.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structentt_1_1generator-members.html b/structentt_1_1generator-members.html new file mode 100644 index 000000000..d9e946aff --- /dev/null +++ b/structentt_1_1generator-members.html @@ -0,0 +1,85 @@ + + + + + + + +EnTT: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    EnTT +  3.3.0 +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    entt::generator<... > Member List
    +
    +
    + +

    This is the complete list of members for entt::generator<... >, including all inherited members.

    + + +
    next() ENTT_NOEXCEPTentt::generator<... >inlinestatic
    + + + + diff --git a/structentt_1_1generator.html b/structentt_1_1generator.html new file mode 100644 index 000000000..94fad3237 --- /dev/null +++ b/structentt_1_1generator.html @@ -0,0 +1,139 @@ + + + + + + + +EnTT: entt::generator<... > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    EnTT +  3.3.0 +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    entt::generator<... > Struct Template Reference
    +
    +
    + +

    Sequential number generator. + More...

    + +

    #include <family.hpp>

    + + + + + +

    +Static Public Member Functions

    static ENTT_ID_TYPE next () ENTT_NOEXCEPT
     Returns the next available value. More...
     
    +

    Detailed Description

    +

    template<typename...>
    +struct entt::generator<... >

    + +

    Sequential number generator.

    + +

    Definition at line 14 of file family.hpp.

    +

    Member Function Documentation

    + +

    ◆ next()

    + +
    +
    +
    +template<typename... >
    + + + + + +
    + + + + + + + +
    static ENTT_ID_TYPE entt::generator<... >::next ()
    +
    +inlinestatic
    +
    + +

    Returns the next available value.

    +
    Returns
    The next available value.
    + +

    Definition at line 19 of file family.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structentt_1_1get__t.html b/structentt_1_1get__t.html index 655c31cca..70036250f 100644 --- a/structentt_1_1get__t.html +++ b/structentt_1_1get__t.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::get_t< Type > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    Inheritance graph
    - + +
    [legend]
    @@ -85,7 +89,8 @@ Collaboration diagram for entt::get_t< Type >:
    Collaboration graph
    - + +
    [legend]

    Detailed Description

    @@ -109,7 +114,7 @@ struct entt::get_t< Type > diff --git a/structentt_1_1get__t__coll__graph.map b/structentt_1_1get__t__coll__graph.map index 1adff6c7f..58ebb6f83 100644 --- a/structentt_1_1get__t__coll__graph.map +++ b/structentt_1_1get__t__coll__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/structentt_1_1get__t__coll__graph.md5 b/structentt_1_1get__t__coll__graph.md5 index 9c9662fee..76a418297 100644 --- a/structentt_1_1get__t__coll__graph.md5 +++ b/structentt_1_1get__t__coll__graph.md5 @@ -1 +1 @@ -de8ed796fa0befd52014ea09ff1bff1d \ No newline at end of file +3eafa0c0c4a8c11b54308af3b028f73e \ No newline at end of file diff --git a/structentt_1_1get__t__inherit__graph.map b/structentt_1_1get__t__inherit__graph.map index 1adff6c7f..58ebb6f83 100644 --- a/structentt_1_1get__t__inherit__graph.map +++ b/structentt_1_1get__t__inherit__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/structentt_1_1get__t__inherit__graph.md5 b/structentt_1_1get__t__inherit__graph.md5 index 43597f6da..76a418297 100644 --- a/structentt_1_1get__t__inherit__graph.md5 +++ b/structentt_1_1get__t__inherit__graph.md5 @@ -1 +1 @@ -ae5e7f61605ed19d01d8b0a089cb2f41 \ No newline at end of file +3eafa0c0c4a8c11b54308af3b028f73e \ No newline at end of file diff --git a/structentt_1_1identity-members.html b/structentt_1_1identity-members.html index 4f20e0fb9..0453a9082 100644 --- a/structentt_1_1identity-members.html +++ b/structentt_1_1identity-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ - + +/* @license-end */
    template<class Type > constexpr Type && operator() (Type &&value) const ENTT_NOEXCEPT - Returns its argument unchanged. More...
    + Returns its argument unchanged. More...
     

    Detailed Description

    @@ -109,7 +112,7 @@ template<class Type >
    -inline +inlineconstexpr
    @@ -141,7 +144,7 @@ template<class Type >
    diff --git a/structentt_1_1insertion__sort-members.html b/structentt_1_1insertion__sort-members.html index 1c81c6d6e..aa39c7425 100644 --- a/structentt_1_1insertion__sort-members.html +++ b/structentt_1_1insertion__sort-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */
    template<typename It , typename Compare = std::less<>> void operator() (It first, It last, Compare compare=Compare{}) const - Sorts the elements in a range. More...
    + Sorts the elements in a range. More...
     

    Detailed Description

    @@ -160,7 +163,7 @@ template<typename It , typename Compare = std::less<>>
    diff --git a/structentt_1_1is__equality__comparable.html b/structentt_1_1is__equality__comparable.html index bc3f3feb3..6535c9754 100644 --- a/structentt_1_1is__equality__comparable.html +++ b/structentt_1_1is__equality__comparable.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::is_equality_comparable< Type, typename > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */
    Inheritance graph
    + + + +
    [legend]
    Collaboration diagram for entt::is_equality_comparable< Type, typename >:
    Collaboration graph
    + + + +
    [legend]

    Detailed Description

    template<typename Type, typename = std::void_t<>>
    @@ -103,7 +114,7 @@ struct entt::is_equality_comparable< Type, typename >

    diff --git a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva1cb524e6c54df82cda82d1a4dfba6abe.md5 b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva1cb524e6c54df82cda82d1a4dfba6abe.md5 deleted file mode 100644 index b469b3e9d..000000000 --- a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva1cb524e6c54df82cda82d1a4dfba6abe.md5 +++ /dev/null @@ -1 +0,0 @@ -fee18437d6f544c2674fa0213a79c2dd \ No newline at end of file diff --git a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva22225425f92ebe2943dca66f125cfda1.html b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva46aebf4c20f38cbd0108d1e297595736.html similarity index 71% rename from structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva22225425f92ebe2943dca66f125cfda1.html rename to structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva46aebf4c20f38cbd0108d1e297595736.html index b0a09b55d..ecc429379 100644 --- a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva22225425f92ebe2943dca66f125cfda1.html +++ b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva46aebf4c20f38cbd0108d1e297595736.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::is_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    @@ -69,18 +72,26 @@ $(function() {

    Provides the member constant value to true if a given type is equality comparable, false otherwise. - More...

    + More...

    #include <type_traits.hpp>

    Inheritance diagram for entt::is_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> >:
    -
    Inheritance graph
    +
    Inheritance graph
    + + + +
    [legend]
    Collaboration diagram for entt::is_equality_comparable< Type, std::void_t< decltype(std::declval< Type >()==std::declval< Type >())> >:
    -
    Collaboration graph
    +
    Collaboration graph
    + + + +
    [legend]

    Detailed Description

    template<typename Type>
    @@ -103,7 +114,7 @@ struct entt::is_equality_comparable< Type, std::void_t< decltype(std::decl diff --git a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva1cb524e6c54df82cda82d1a4dfba6abe.map b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva5c1d68aca80e5da312839debee08d38e.map similarity index 56% rename from structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva1cb524e6c54df82cda82d1a4dfba6abe.map rename to structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva5c1d68aca80e5da312839debee08d38e.map index 02400c46b..9cfa8800a 100644 --- a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva1cb524e6c54df82cda82d1a4dfba6abe.map +++ b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva5c1d68aca80e5da312839debee08d38e.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva5c1d68aca80e5da312839debee08d38e.md5 b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva5c1d68aca80e5da312839debee08d38e.md5 new file mode 100644 index 000000000..d12589523 --- /dev/null +++ b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva5c1d68aca80e5da312839debee08d38e.md5 @@ -0,0 +1 @@ +7c5a8147a8a17954a9de9d6755ec2d69 \ No newline at end of file diff --git a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva1cb524e6c54df82cda82d1a4dfba6abe.png b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva5c1d68aca80e5da312839debee08d38e.png similarity index 100% rename from structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva1cb524e6c54df82cda82d1a4dfba6abe.png rename to structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva5c1d68aca80e5da312839debee08d38e.png diff --git a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvabfe6c5f774b5178f5435086b847a8374.map b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvaaf8c5fc435d01b8c7467d553d4cf4ad8.map similarity index 56% rename from structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvabfe6c5f774b5178f5435086b847a8374.map rename to structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvaaf8c5fc435d01b8c7467d553d4cf4ad8.map index 02400c46b..9cfa8800a 100644 --- a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvabfe6c5f774b5178f5435086b847a8374.map +++ b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvaaf8c5fc435d01b8c7467d553d4cf4ad8.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvaaf8c5fc435d01b8c7467d553d4cf4ad8.md5 b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvaaf8c5fc435d01b8c7467d553d4cf4ad8.md5 new file mode 100644 index 000000000..d12589523 --- /dev/null +++ b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvaaf8c5fc435d01b8c7467d553d4cf4ad8.md5 @@ -0,0 +1 @@ +7c5a8147a8a17954a9de9d6755ec2d69 \ No newline at end of file diff --git a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvabfe6c5f774b5178f5435086b847a8374.png b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvaaf8c5fc435d01b8c7467d553d4cf4ad8.png similarity index 100% rename from structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvabfe6c5f774b5178f5435086b847a8374.png rename to structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvaaf8c5fc435d01b8c7467d553d4cf4ad8.png diff --git a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvabfe6c5f774b5178f5435086b847a8374.md5 b/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvabfe6c5f774b5178f5435086b847a8374.md5 deleted file mode 100644 index ac20fb67f..000000000 --- a/structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declvabfe6c5f774b5178f5435086b847a8374.md5 +++ /dev/null @@ -1 +0,0 @@ -edd0e692b2cd75cb60092ea47fa2276a \ No newline at end of file diff --git a/structentt_1_1is__equality__comparable__coll__graph.map b/structentt_1_1is__equality__comparable__coll__graph.map index b7a6199df..08aa242f2 100644 --- a/structentt_1_1is__equality__comparable__coll__graph.map +++ b/structentt_1_1is__equality__comparable__coll__graph.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1is__equality__comparable__coll__graph.md5 b/structentt_1_1is__equality__comparable__coll__graph.md5 index c031e48cb..13466869f 100644 --- a/structentt_1_1is__equality__comparable__coll__graph.md5 +++ b/structentt_1_1is__equality__comparable__coll__graph.md5 @@ -1 +1 @@ -79ac629113b298dfb59599dff81e02cf \ No newline at end of file +0fbe2d2783b875dadb3260bb1030ba13 \ No newline at end of file diff --git a/structentt_1_1is__equality__comparable__inherit__graph.map b/structentt_1_1is__equality__comparable__inherit__graph.map index b7a6199df..08aa242f2 100644 --- a/structentt_1_1is__equality__comparable__inherit__graph.map +++ b/structentt_1_1is__equality__comparable__inherit__graph.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1is__equality__comparable__inherit__graph.md5 b/structentt_1_1is__equality__comparable__inherit__graph.md5 index 8b531fc52..13466869f 100644 --- a/structentt_1_1is__equality__comparable__inherit__graph.md5 +++ b/structentt_1_1is__equality__comparable__inherit__graph.md5 @@ -1 +1 @@ -6f81a80d20bd5a32b01e843b647d0d37 \ No newline at end of file +0fbe2d2783b875dadb3260bb1030ba13 \ No newline at end of file diff --git a/structentt_1_1is__named__type.html b/structentt_1_1is__named__type.html index c7cd4572a..bf8966e83 100644 --- a/structentt_1_1is__named__type.html +++ b/structentt_1_1is__named__type.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::is_named_type< Type, typename > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@

    - + +/* @license-end */
    Inheritance graph
    + + + +
    [legend]
    Collaboration diagram for entt::is_named_type< Type, typename >:
    Collaboration graph
    + + + +
    [legend]

    Detailed Description

    template<typename Type, typename = std::void_t<>>
    @@ -103,7 +114,7 @@ struct entt::is_named_type< Type, typename >

    diff --git a/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_0c6058b8ba47cc9c6693d18c8fb48d92.map b/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_0c6058b8ba47cc9c6693d18c8fb48d92.map index f4836835a..f138f158f 100644 --- a/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_0c6058b8ba47cc9c6693d18c8fb48d92.map +++ b/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_0c6058b8ba47cc9c6693d18c8fb48d92.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_0c6058b8ba47cc9c6693d18c8fb48d92.md5 b/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_0c6058b8ba47cc9c6693d18c8fb48d92.md5 index e7b8d0969..e7bf0c8f1 100644 --- a/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_0c6058b8ba47cc9c6693d18c8fb48d92.md5 +++ b/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_0c6058b8ba47cc9c6693d18c8fb48d92.md5 @@ -1 +1 @@ -2de8bdc27b2970e35746a08fc74cbeb5 \ No newline at end of file +392a99b82cfedf64d35169691275356c \ No newline at end of file diff --git a/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_268fa5a871b2de95e24d77c0786df19e.html b/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_268fa5a871b2de95e24d77c0786df19e.html index d6040bb91..251995eb7 100644 --- a/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_268fa5a871b2de95e24d77c0786df19e.html +++ b/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_268fa5a871b2de95e24d77c0786df19e.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::is_named_type< Type, std::void_t< named_type_traits_t< std::decay_t< Type > > > > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    Inheritance graph
    + + + +
    [legend]
    Collaboration diagram for entt::is_named_type< Type, std::void_t< named_type_traits_t< std::decay_t< Type > > > >:
    Collaboration graph
    + + + +
    [legend]

    Detailed Description

    template<typename Type>
    @@ -103,7 +114,7 @@ struct entt::is_named_type< Type, std::void_t< named_type_traits_t< std diff --git a/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_9aa8d80f3ceacce258d85ba16cdb7265.map b/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_9aa8d80f3ceacce258d85ba16cdb7265.map index f4836835a..f138f158f 100644 --- a/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_9aa8d80f3ceacce258d85ba16cdb7265.map +++ b/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_9aa8d80f3ceacce258d85ba16cdb7265.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_9aa8d80f3ceacce258d85ba16cdb7265.md5 b/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_9aa8d80f3ceacce258d85ba16cdb7265.md5 index 338cc0b93..e7bf0c8f1 100644 --- a/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_9aa8d80f3ceacce258d85ba16cdb7265.md5 +++ b/structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_9aa8d80f3ceacce258d85ba16cdb7265.md5 @@ -1 +1 @@ -62b0504b9a783e944e5f8f9afcad6a31 \ No newline at end of file +392a99b82cfedf64d35169691275356c \ No newline at end of file diff --git a/structentt_1_1is__named__type__coll__graph.map b/structentt_1_1is__named__type__coll__graph.map index 30da58e63..fa22010fa 100644 --- a/structentt_1_1is__named__type__coll__graph.map +++ b/structentt_1_1is__named__type__coll__graph.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1is__named__type__coll__graph.md5 b/structentt_1_1is__named__type__coll__graph.md5 index b3e6aaa0b..6c036ee88 100644 --- a/structentt_1_1is__named__type__coll__graph.md5 +++ b/structentt_1_1is__named__type__coll__graph.md5 @@ -1 +1 @@ -c1dbfb3f619b7a5f7bbafa4ff453812d \ No newline at end of file +18530e5107bc720021e33442e78eca41 \ No newline at end of file diff --git a/structentt_1_1is__named__type__inherit__graph.map b/structentt_1_1is__named__type__inherit__graph.map index 30da58e63..fa22010fa 100644 --- a/structentt_1_1is__named__type__inherit__graph.map +++ b/structentt_1_1is__named__type__inherit__graph.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1is__named__type__inherit__graph.md5 b/structentt_1_1is__named__type__inherit__graph.md5 index fb997606a..6c036ee88 100644 --- a/structentt_1_1is__named__type__inherit__graph.md5 +++ b/structentt_1_1is__named__type__inherit__graph.md5 @@ -1 +1 @@ -a5249ddad21262ceff2901cd1b48abaa \ No newline at end of file +18530e5107bc720021e33442e78eca41 \ No newline at end of file diff --git a/structentt_1_1matcher.html b/structentt_1_1matcher.html index 53828009c..01cc03c4f 100644 --- a/structentt_1_1matcher.html +++ b/structentt_1_1matcher.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::matcher<... > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@

    - + +/* @license-end */
    diff --git a/structentt_1_1meta__base-members.html b/structentt_1_1meta__base-members.html index dc9d61e17..13b4ae25b 100644 --- a/structentt_1_1meta__base-members.html +++ b/structentt_1_1meta__base-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

     meta_base (const internal::meta_base_node *curr=nullptr) ENTT_NOEXCEPT - Constructs an instance from a given node. More...
    + Constructs an instance from a given node. More...
      meta_type parent () const ENTT_NOEXCEPT - Returns the meta type to which a meta object belongs. More...
    + Returns the meta type to which a meta object belongs. More...
      meta_type type () const ENTT_NOEXCEPT - Returns the meta type of the underlying object. More...
    + Returns the meta type of the underlying object. More...
      void * cast (void *instance) const ENTT_NOEXCEPT - Casts an instance from a parent type to a base type. More...
    + Casts an instance from a parent type to a base type. More...
       operator bool () const ENTT_NOEXCEPT - Returns true if a meta object is valid, false otherwise. More...
    + Returns true if a meta object is valid, false otherwise. More...
      bool operator== (const meta_base &other) const ENTT_NOEXCEPT - Checks if two meta objects refer to the same node. More...
    + Checks if two meta objects refer to the same node. More...
     

    Detailed Description

    Opaque container for meta base classes.

    -

    Definition at line 831 of file meta.hpp.

    +

    Definition at line 830 of file meta.hpp.

    Constructor & Destructor Documentation

    ◆ meta_base()

    @@ -134,7 +137,7 @@ Public Member Functions
    -

    Definition at line 833 of file meta.hpp.

    +

    Definition at line 832 of file meta.hpp.

    @@ -172,7 +175,7 @@ Public Member Functions
    Returns
    An opaque pointer to the base type.
    -

    Definition at line 851 of file meta.hpp.

    +

    Definition at line 850 of file meta.hpp.

    @@ -202,7 +205,7 @@ Public Member Functions

    Returns true if a meta object is valid, false otherwise.

    Returns
    True if the meta object is valid, false otherwise.
    -

    Definition at line 859 of file meta.hpp.

    +

    Definition at line 858 of file meta.hpp.

    @@ -239,7 +242,7 @@ Public Member Functions
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 864 of file meta.hpp.

    +

    Definition at line 863 of file meta.hpp.

    @@ -269,7 +272,7 @@ Public Member Functions

    Returns the meta type to which a meta object belongs.

    Returns
    The meta type to which the meta object belongs.
    -

    Definition at line 1791 of file meta.hpp.

    +

    Definition at line 1790 of file meta.hpp.

    @@ -299,7 +302,7 @@ Public Member Functions

    Returns the meta type of the underlying object.

    Returns
    The meta type of the underlying object, if any.
    -

    Definition at line 1796 of file meta.hpp.

    +

    Definition at line 1795 of file meta.hpp.

    @@ -311,7 +314,7 @@ Public Member Functions diff --git a/structentt_1_1meta__conv-members.html b/structentt_1_1meta__conv-members.html index e83325afd..f5d9f140c 100644 --- a/structentt_1_1meta__conv-members.html +++ b/structentt_1_1meta__conv-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

     meta_conv (const internal::meta_conv_node *curr=nullptr) ENTT_NOEXCEPT - Constructs an instance from a given node. More...
    + Constructs an instance from a given node. More...
      meta_type parent () const ENTT_NOEXCEPT - Returns the meta type to which a meta object belongs. More...
    + Returns the meta type to which a meta object belongs. More...
      meta_type type () const ENTT_NOEXCEPT - Returns the meta type of the underlying object. More...
    + Returns the meta type of the underlying object. More...
      meta_any convert (const void *instance) const ENTT_NOEXCEPT - Converts an instance to a given type. More...
    + Converts an instance to a given type. More...
       operator bool () const ENTT_NOEXCEPT - Returns true if a meta object is valid, false otherwise. More...
    + Returns true if a meta object is valid, false otherwise. More...
      bool operator== (const meta_conv &other) const ENTT_NOEXCEPT - Checks if two meta objects refer to the same node. More...
    + Checks if two meta objects refer to the same node. More...
     

    Detailed Description

    Opaque container for meta conversion functions.

    -

    Definition at line 880 of file meta.hpp.

    +

    Definition at line 879 of file meta.hpp.

    Constructor & Destructor Documentation

    ◆ meta_conv()

    @@ -134,7 +137,7 @@ Public Member Functions -

    Definition at line 882 of file meta.hpp.

    +

    Definition at line 881 of file meta.hpp.

    @@ -172,7 +175,7 @@ Public Member Functions
    Returns
    An opaque pointer to the instance to convert.
    -

    Definition at line 897 of file meta.hpp.

    +

    Definition at line 896 of file meta.hpp.

    @@ -202,7 +205,7 @@ Public Member Functions

    Returns true if a meta object is valid, false otherwise.

    Returns
    True if the meta object is valid, false otherwise.
    -

    Definition at line 905 of file meta.hpp.

    +

    Definition at line 904 of file meta.hpp.

    @@ -239,7 +242,7 @@ Public Member Functions
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 910 of file meta.hpp.

    +

    Definition at line 909 of file meta.hpp.

    @@ -269,7 +272,7 @@ Public Member Functions

    Returns the meta type to which a meta object belongs.

    Returns
    The meta type to which the meta object belongs.
    -

    Definition at line 1801 of file meta.hpp.

    +

    Definition at line 1800 of file meta.hpp.

    @@ -299,7 +302,7 @@ Public Member Functions

    Returns the meta type of the underlying object.

    Returns
    The meta type of the underlying object, if any.
    -

    Definition at line 1806 of file meta.hpp.

    +

    Definition at line 1805 of file meta.hpp.

    @@ -311,7 +314,7 @@ Public Member Functions diff --git a/structentt_1_1meta__ctor-members.html b/structentt_1_1meta__ctor-members.html index 65ea81030..482b4e323 100644 --- a/structentt_1_1meta__ctor-members.html +++ b/structentt_1_1meta__ctor-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

     meta_ctor (const internal::meta_ctor_node *curr=nullptr) ENTT_NOEXCEPT - Constructs an instance from a given node. More...
    + Constructs an instance from a given node. More...
      meta_type parent () const ENTT_NOEXCEPT - Returns the meta type to which a meta object belongs. More...
    + Returns the meta type to which a meta object belongs. More...
      size_type size () const ENTT_NOEXCEPT - Returns the number of arguments accepted by a meta constructor. More...
    + Returns the number of arguments accepted by a meta constructor. More...
      meta_type arg (size_type index) const ENTT_NOEXCEPT - Returns the meta type of the i-th argument of a meta constructor. More...
    + Returns the meta type of the i-th argument of a meta constructor. More...
      template<typename... Args> meta_any invoke (Args &&... args) const - Creates an instance of the underlying type, if possible. More...
    + Creates an instance of the underlying type, if possible. More...
      template<typename Op > std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop (Op op) const ENTT_NOEXCEPT - Iterates all the properties assigned to a meta constructor. More...
    + Iterates all the properties assigned to a meta constructor. More...
      meta_prop prop (meta_any key) const ENTT_NOEXCEPT - Returns the property associated with a given key. More...
    + Returns the property associated with a given key. More...
       operator bool () const ENTT_NOEXCEPT - Returns true if a meta object is valid, false otherwise. More...
    + Returns true if a meta object is valid, false otherwise. More...
      bool operator== (const meta_ctor &other) const ENTT_NOEXCEPT - Checks if two meta objects refer to the same node. More...
    + Checks if two meta objects refer to the same node. More...
     

    Detailed Description

    Opaque container for meta constructors.

    -

    Definition at line 926 of file meta.hpp.

    +

    Definition at line 925 of file meta.hpp.

    Constructor & Destructor Documentation

    ◆ meta_ctor()

    @@ -153,7 +156,7 @@ Public Member Functions -

    Definition at line 931 of file meta.hpp.

    +

    Definition at line 930 of file meta.hpp.

    @@ -191,7 +194,7 @@ Public Member Functions
    Returns
    The meta type of the i-th argument of a meta constructor, if any.
    -

    Definition at line 1816 of file meta.hpp.

    +

    Definition at line 1815 of file meta.hpp.

    @@ -237,7 +240,7 @@ template<typename... Args>
    Returns
    A meta any containing the new instance, if any.
    -

    Definition at line 965 of file meta.hpp.

    +

    Definition at line 964 of file meta.hpp.

    @@ -267,7 +270,7 @@ template<typename... Args>

    Returns true if a meta object is valid, false otherwise.

    Returns
    True if the meta object is valid, false otherwise.
    -

    Definition at line 1002 of file meta.hpp.

    +

    Definition at line 1001 of file meta.hpp.

    @@ -304,7 +307,7 @@ template<typename... Args>
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 1007 of file meta.hpp.

    +

    Definition at line 1006 of file meta.hpp.

    @@ -334,12 +337,49 @@ template<typename... Args>

    Returns the meta type to which a meta object belongs.

    Returns
    The meta type to which the meta object belongs.
    -

    Definition at line 1811 of file meta.hpp.

    +

    Definition at line 1810 of file meta.hpp.

    + + + + +

    ◆ prop() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    meta_prop entt::meta_ctor::prop (meta_any key) const
    +
    +inline
    +
    + +

    Returns the property associated with a given key.

    +
    Parameters
    + + +
    keyThe key to use to search for a property.
    +
    +
    +
    Returns
    The property associated with the given key, if any.
    + +

    Definition at line 991 of file meta.hpp.

    -

    ◆ prop() [1/2]

    +

    ◆ prop() [2/2]

    @@ -378,44 +418,7 @@ template<typename Op >
    -

    Definition at line 983 of file meta.hpp.

    - -
    - - -

    ◆ prop() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    meta_prop entt::meta_ctor::prop (meta_any key) const
    -
    -inline
    -
    - -

    Returns the property associated with a given key.

    -
    Parameters
    - - -
    keyThe key to use to search for a property.
    -
    -
    -
    Returns
    The property associated with the given key, if any.
    - -

    Definition at line 992 of file meta.hpp.

    +

    Definition at line 982 of file meta.hpp.

    @@ -445,7 +448,7 @@ template<typename Op >

    Returns the number of arguments accepted by a meta constructor.

    Returns
    The number of arguments accepted by the meta constructor.
    -

    Definition at line 942 of file meta.hpp.

    +

    Definition at line 941 of file meta.hpp.

    @@ -457,7 +460,7 @@ template<typename Op > diff --git a/structentt_1_1meta__ctx-members.html b/structentt_1_1meta__ctx-members.html index 7d9f17607..b16416b30 100644 --- a/structentt_1_1meta__ctx-members.html +++ b/structentt_1_1meta__ctx-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */

    Static Public Member Functions

    static void bind (meta_ctx other) ENTT_NOEXCEPT - Binds the meta system to the given context. More...
    + Binds the meta system to the given context. More...
     

    Detailed Description

    Opaque container for a meta context.

    -

    Definition at line 1753 of file meta.hpp.

    +

    Definition at line 1752 of file meta.hpp.

    Member Function Documentation

    ◆ bind()

    @@ -119,7 +122,7 @@ Static Public Member Functions -

    Definition at line 1758 of file meta.hpp.

    +

    Definition at line 1757 of file meta.hpp.

    @@ -131,7 +134,7 @@ Static Public Member Functions diff --git a/structentt_1_1meta__data-members.html b/structentt_1_1meta__data-members.html index c89b77dfa..2da51411a 100644 --- a/structentt_1_1meta__data-members.html +++ b/structentt_1_1meta__data-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

     meta_data (const internal::meta_data_node *curr=nullptr) ENTT_NOEXCEPT - Constructs an instance from a given node. More...
    + Constructs an instance from a given node. More...
      ENTT_ID_TYPE identifier () const ENTT_NOEXCEPT - Returns the identifier assigned to a given meta object. More...
    + Returns the identifier assigned to a given meta object. More...
      meta_type parent () const ENTT_NOEXCEPT - Returns the meta type to which a meta object belongs. More...
    + Returns the meta type to which a meta object belongs. More...
      bool is_const () const ENTT_NOEXCEPT - Indicates whether a given meta data is constant or not. More...
    + Indicates whether a given meta data is constant or not. More...
      bool is_static () const ENTT_NOEXCEPT - Indicates whether a given meta data is static or not. More...
    + Indicates whether a given meta data is static or not. More...
      meta_type type () const ENTT_NOEXCEPT - Returns the meta type of the underlying object. More...
    + Returns the meta type of the underlying object. More...
      template<typename Type > bool set (meta_handle handle, Type &&value) const - Sets the value of the variable enclosed by a given meta type. More...
    + Sets the value of the variable enclosed by a given meta type. More...
      template<typename Type > bool set (meta_handle handle, std::size_t index, Type &&value) const - Sets the i-th element of an array enclosed by a given meta type. More...
    + Sets the i-th element of an array enclosed by a given meta type. More...
      meta_any get (meta_handle handle) const ENTT_NOEXCEPT - Gets the value of the variable enclosed by a given meta type. More...
    + Gets the value of the variable enclosed by a given meta type. More...
      meta_any get (meta_handle handle, std::size_t index) const ENTT_NOEXCEPT - Gets the i-th element of an array enclosed by a given meta type. More...
    + Gets the i-th element of an array enclosed by a given meta type. More...
      template<typename Op > std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop (Op op) const ENTT_NOEXCEPT - Iterates all the properties assigned to a meta data. More...
    + Iterates all the properties assigned to a meta data. More...
      meta_prop prop (meta_any key) const ENTT_NOEXCEPT - Returns the property associated with a given key. More...
    + Returns the property associated with a given key. More...
       operator bool () const ENTT_NOEXCEPT - Returns true if a meta object is valid, false otherwise. More...
    + Returns true if a meta object is valid, false otherwise. More...
      bool operator== (const meta_data &other) const ENTT_NOEXCEPT - Checks if two meta objects refer to the same node. More...
    + Checks if two meta objects refer to the same node. More...
     

    Detailed Description

    Opaque container for meta data.

    -

    Definition at line 1071 of file meta.hpp.

    +

    Definition at line 1070 of file meta.hpp.

    Constructor & Destructor Documentation

    ◆ meta_data()

    @@ -161,7 +164,7 @@ Public Member Functions -

    Definition at line 1073 of file meta.hpp.

    +

    Definition at line 1072 of file meta.hpp.

    @@ -200,7 +203,7 @@ Public Member Functions
    Returns
    A meta any containing the value of the underlying variable.
    -

    Definition at line 1157 of file meta.hpp.

    +

    Definition at line 1156 of file meta.hpp.

    @@ -249,7 +252,7 @@ Public Member Functions
    Returns
    A meta any containing the value of the underlying element.
    -

    Definition at line 1171 of file meta.hpp.

    +

    Definition at line 1170 of file meta.hpp.

    @@ -279,7 +282,7 @@ Public Member Functions

    Returns the identifier assigned to a given meta object.

    Returns
    The identifier assigned to the meta object.
    -

    Definition at line 1078 of file meta.hpp.

    +

    Definition at line 1077 of file meta.hpp.

    @@ -309,7 +312,7 @@ Public Member Functions

    Indicates whether a given meta data is constant or not.

    Returns
    True if the meta data is constant, false otherwise.
    -

    Definition at line 1089 of file meta.hpp.

    +

    Definition at line 1088 of file meta.hpp.

    @@ -340,7 +343,7 @@ Public Member Functions

    A static meta data is such that it can be accessed using a null pointer as an instance.

    Returns
    True if the meta data is static, false otherwise.
    -

    Definition at line 1101 of file meta.hpp.

    +

    Definition at line 1100 of file meta.hpp.

    @@ -370,7 +373,7 @@ Public Member Functions

    Returns true if a meta object is valid, false otherwise.

    Returns
    True if the meta object is valid, false otherwise.
    -

    Definition at line 1202 of file meta.hpp.

    +

    Definition at line 1201 of file meta.hpp.

    @@ -407,7 +410,7 @@ Public Member Functions
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 1207 of file meta.hpp.

    +

    Definition at line 1206 of file meta.hpp.

    @@ -437,12 +440,49 @@ Public Member Functions

    Returns the meta type to which a meta object belongs.

    Returns
    The meta type to which the meta object belongs.
    -

    Definition at line 1826 of file meta.hpp.

    +

    Definition at line 1825 of file meta.hpp.

    + + + + +

    ◆ prop() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    meta_prop entt::meta_data::prop (meta_any key) const
    +
    +inline
    +
    + +

    Returns the property associated with a given key.

    +
    Parameters
    + + +
    keyThe key to use to search for a property.
    +
    +
    +
    Returns
    The property associated with the given key, if any.
    + +

    Definition at line 1191 of file meta.hpp.

    -

    ◆ prop() [1/2]

    +

    ◆ prop() [2/2]

    @@ -481,107 +521,12 @@ template<typename Op >
    -

    Definition at line 1183 of file meta.hpp.

    - -
    - - -

    ◆ prop() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    meta_prop entt::meta_data::prop (meta_any key) const
    -
    -inline
    -
    - -

    Returns the property associated with a given key.

    -
    Parameters
    - - -
    keyThe key to use to search for a property.
    -
    -
    -
    Returns
    The property associated with the given key, if any.
    - -

    Definition at line 1192 of file meta.hpp.

    - -
    -
    - -

    ◆ set() [1/2]

    - -
    -
    -
    -template<typename Type >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool entt::meta_data::set (meta_handle handle,
    Type && value 
    ) const
    -
    -inline
    -
    - -

    Sets the value of the variable enclosed by a given meta type.

    -

    It must be possible to cast the instance to the parent type of the meta data. Otherwise, invoking the setter results in an undefined behavior.
    - The type of the value must coincide exactly with that of the variable enclosed by the meta data. Otherwise, invoking the setter does nothing.

    -
    Template Parameters
    - - -
    TypeType of value to assign.
    -
    -
    -
    Parameters
    - - - -
    handleAn opaque pointer to an instance of the underlying type.
    valueParameter to use to set the underlying variable.
    -
    -
    -
    Returns
    True in case of success, false otherwise.
    - -

    Definition at line 1123 of file meta.hpp.

    +

    Definition at line 1182 of file meta.hpp.

    -

    ◆ set() [2/2]

    +

    ◆ set() [1/2]

    @@ -623,7 +568,7 @@ template<typename Type >

    Sets the i-th element of an array enclosed by a given meta type.

    -

    It must be possible to cast the instance to the parent type of the meta data. Otherwise, invoking the setter results in an undefined behavior.
    +

    It must be possible to cast the instance to the parent type of the meta data. Otherwise, invoking the setter results in an undefined behavior.
    The type of the value must coincide exactly with that of the array type enclosed by the meta data. Otherwise, invoking the setter does nothing.

    Template Parameters
    @@ -641,7 +586,65 @@ template<typename Type >
    Returns
    True in case of success, false otherwise.
    -

    Definition at line 1143 of file meta.hpp.

    +

    Definition at line 1142 of file meta.hpp.

    + + + + +

    ◆ set() [2/2]

    + +
    +
    +
    +template<typename Type >
    +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool entt::meta_data::set (meta_handle handle,
    Type && value 
    ) const
    +
    +inline
    +
    + +

    Sets the value of the variable enclosed by a given meta type.

    +

    It must be possible to cast the instance to the parent type of the meta data. Otherwise, invoking the setter results in an undefined behavior.
    + The type of the value must coincide exactly with that of the variable enclosed by the meta data. Otherwise, invoking the setter does nothing.

    +
    Template Parameters
    + + +
    TypeType of value to assign.
    +
    +
    +
    Parameters
    + + + +
    handleAn opaque pointer to an instance of the underlying type.
    valueParameter to use to set the underlying variable.
    +
    +
    +
    Returns
    True in case of success, false otherwise.
    + +

    Definition at line 1122 of file meta.hpp.

    @@ -671,7 +674,7 @@ template<typename Type >

    Returns the meta type of the underlying object.

    Returns
    The meta type of the underlying object, if any.
    -

    Definition at line 1831 of file meta.hpp.

    +

    Definition at line 1830 of file meta.hpp.

    @@ -683,7 +686,7 @@ template<typename Type > diff --git a/structentt_1_1meta__dtor-members.html b/structentt_1_1meta__dtor-members.html index 544cebb73..ce8c932bd 100644 --- a/structentt_1_1meta__dtor-members.html +++ b/structentt_1_1meta__dtor-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

     meta_dtor (const internal::meta_dtor_node *curr=nullptr) ENTT_NOEXCEPT - Constructs an instance from a given node. More...
    + Constructs an instance from a given node. More...
      meta_type parent () const ENTT_NOEXCEPT - Returns the meta type to which a meta object belongs. More...
    + Returns the meta type to which a meta object belongs. More...
      bool invoke (meta_handle handle) const - Destroys an instance of the underlying type. More...
    + Destroys an instance of the underlying type. More...
       operator bool () const ENTT_NOEXCEPT - Returns true if a meta object is valid, false otherwise. More...
    + Returns true if a meta object is valid, false otherwise. More...
      bool operator== (const meta_dtor &other) const ENTT_NOEXCEPT - Checks if two meta objects refer to the same node. More...
    + Checks if two meta objects refer to the same node. More...
     

    Detailed Description

    Opaque container for meta destructors.

    -

    Definition at line 1023 of file meta.hpp.

    +

    Definition at line 1022 of file meta.hpp.

    Constructor & Destructor Documentation

    ◆ meta_dtor()

    @@ -131,7 +134,7 @@ Public Member Functions -

    Definition at line 1025 of file meta.hpp.

    +

    Definition at line 1024 of file meta.hpp.

    @@ -170,7 +173,7 @@ Public Member Functions
    Returns
    True in case of success, false otherwise.
    -

    Definition at line 1042 of file meta.hpp.

    +

    Definition at line 1041 of file meta.hpp.

    @@ -200,7 +203,7 @@ Public Member Functions

    Returns true if a meta object is valid, false otherwise.

    Returns
    True if the meta object is valid, false otherwise.
    -

    Definition at line 1050 of file meta.hpp.

    +

    Definition at line 1049 of file meta.hpp.

    @@ -237,7 +240,7 @@ Public Member Functions
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 1055 of file meta.hpp.

    +

    Definition at line 1054 of file meta.hpp.

    @@ -267,7 +270,7 @@ Public Member Functions

    Returns the meta type to which a meta object belongs.

    Returns
    The meta type to which the meta object belongs.
    -

    Definition at line 1821 of file meta.hpp.

    +

    Definition at line 1820 of file meta.hpp.

    @@ -279,7 +282,7 @@ Public Member Functions diff --git a/structentt_1_1meta__func-members.html b/structentt_1_1meta__func-members.html index ba394dbed..b6173175e 100644 --- a/structentt_1_1meta__func-members.html +++ b/structentt_1_1meta__func-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

     meta_func (const internal::meta_func_node *curr=nullptr) ENTT_NOEXCEPT - Constructs an instance from a given node. More...
    + Constructs an instance from a given node. More...
      ENTT_ID_TYPE identifier () const ENTT_NOEXCEPT - Returns the identifier assigned to a given meta object. More...
    + Returns the identifier assigned to a given meta object. More...
      meta_type parent () const ENTT_NOEXCEPT - Returns the meta type to which a meta object belongs. More...
    + Returns the meta type to which a meta object belongs. More...
      size_type size () const ENTT_NOEXCEPT - Returns the number of arguments accepted by a meta function. More...
    + Returns the number of arguments accepted by a meta function. More...
      bool is_const () const ENTT_NOEXCEPT - Indicates whether a given meta function is constant or not. More...
    + Indicates whether a given meta function is constant or not. More...
      bool is_static () const ENTT_NOEXCEPT - Indicates whether a given meta function is static or not. More...
    + Indicates whether a given meta function is static or not. More...
      meta_type ret () const ENTT_NOEXCEPT - Returns the meta type of the return type of a meta function. More...
    + Returns the meta type of the return type of a meta function. More...
      meta_type arg (size_type index) const ENTT_NOEXCEPT - Returns the meta type of the i-th argument of a meta function. More...
    + Returns the meta type of the i-th argument of a meta function. More...
      template<typename... Args> meta_any invoke (meta_handle handle, Args &&... args) const - Invokes the underlying function, if possible. More...
    + Invokes the underlying function, if possible. More...
      template<typename Op > std::enable_if_t< std::is_invocable_v< Op, meta_prop >, void > prop (Op op) const ENTT_NOEXCEPT - Iterates all the properties assigned to a meta function. More...
    + Iterates all the properties assigned to a meta function. More...
      meta_prop prop (meta_any key) const ENTT_NOEXCEPT - Returns the property associated with a given key. More...
    + Returns the property associated with a given key. More...
       operator bool () const ENTT_NOEXCEPT - Returns true if a meta object is valid, false otherwise. More...
    + Returns true if a meta object is valid, false otherwise. More...
      bool operator== (const meta_func &other) const ENTT_NOEXCEPT - Checks if two meta objects refer to the same node. More...
    + Checks if two meta objects refer to the same node. More...
     

    Detailed Description

    Opaque container for meta functions.

    -

    Definition at line 1223 of file meta.hpp.

    +

    Definition at line 1222 of file meta.hpp.

    Constructor & Destructor Documentation

    ◆ meta_func()

    @@ -165,7 +168,7 @@ Public Member Functions -

    Definition at line 1228 of file meta.hpp.

    +

    Definition at line 1227 of file meta.hpp.

    @@ -203,7 +206,7 @@ Public Member Functions
    Returns
    The meta type of the i-th argument of a meta function, if any.
    -

    Definition at line 1846 of file meta.hpp.

    +

    Definition at line 1845 of file meta.hpp.

    @@ -233,7 +236,7 @@ Public Member Functions

    Returns the identifier assigned to a given meta object.

    Returns
    The identifier assigned to the meta object.
    -

    Definition at line 1233 of file meta.hpp.

    +

    Definition at line 1232 of file meta.hpp.

    @@ -274,7 +277,7 @@ template<typename... Args>

    Invokes the underlying function, if possible.

    -

    To invoke a meta function, the types of the parameters must coincide exactly with those required by the underlying function. Otherwise, an empty and then invalid container is returned.
    +

    To invoke a meta function, the types of the parameters must coincide exactly with those required by the underlying function. Otherwise, an empty and then invalid container is returned.
    It must be possible to cast the instance to the parent type of the meta function. Otherwise, invoking the underlying function results in an undefined behavior.

    Template Parameters
    @@ -291,7 +294,7 @@ template<typename... Args>
    Returns
    A meta any containing the returned value, if any.
    -

    Definition at line 1297 of file meta.hpp.

    +

    Definition at line 1296 of file meta.hpp.

    @@ -321,7 +324,7 @@ template<typename... Args>

    Indicates whether a given meta function is constant or not.

    Returns
    True if the meta function is constant, false otherwise.
    -

    Definition at line 1252 of file meta.hpp.

    +

    Definition at line 1251 of file meta.hpp.

    @@ -352,7 +355,7 @@ template<typename... Args>

    A static meta function is such that it can be invoked using a null pointer as an instance.

    Returns
    True if the meta function is static, false otherwise.
    -

    Definition at line 1264 of file meta.hpp.

    +

    Definition at line 1263 of file meta.hpp.

    @@ -382,7 +385,7 @@ template<typename... Args>

    Returns true if a meta object is valid, false otherwise.

    Returns
    True if the meta object is valid, false otherwise.
    -

    Definition at line 1335 of file meta.hpp.

    +

    Definition at line 1334 of file meta.hpp.

    @@ -419,7 +422,7 @@ template<typename... Args>
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 1340 of file meta.hpp.

    +

    Definition at line 1339 of file meta.hpp.

    @@ -449,12 +452,49 @@ template<typename... Args>

    Returns the meta type to which a meta object belongs.

    Returns
    The meta type to which the meta object belongs.
    -

    Definition at line 1836 of file meta.hpp.

    +

    Definition at line 1835 of file meta.hpp.

    + + + + +

    ◆ prop() [1/2]

    + +
    +
    +
    + + + + +
    + + + + + + + + +
    meta_prop entt::meta_func::prop (meta_any key) const
    +
    +inline
    +
    + +

    Returns the property associated with a given key.

    +
    Parameters
    + + +
    keyThe key to use to search for a property.
    +
    +
    +
    Returns
    The property associated with the given key, if any.
    + +

    Definition at line 1324 of file meta.hpp.

    -

    ◆ prop() [1/2]

    +

    ◆ prop() [2/2]

    @@ -493,44 +533,7 @@ template<typename Op >
    -

    Definition at line 1316 of file meta.hpp.

    - -
    - - -

    ◆ prop() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    meta_prop entt::meta_func::prop (meta_any key) const
    -
    -inline
    -
    - -

    Returns the property associated with a given key.

    -
    Parameters
    - - -
    keyThe key to use to search for a property.
    -
    -
    -
    Returns
    The property associated with the given key, if any.
    - -

    Definition at line 1325 of file meta.hpp.

    +

    Definition at line 1315 of file meta.hpp.

    @@ -560,7 +563,7 @@ template<typename Op >

    Returns the meta type of the return type of a meta function.

    Returns
    The meta type of the return type of the meta function.
    -

    Definition at line 1841 of file meta.hpp.

    +

    Definition at line 1840 of file meta.hpp.

    @@ -590,7 +593,7 @@ template<typename Op >

    Returns the number of arguments accepted by a meta function.

    Returns
    The number of arguments accepted by the meta function.
    -

    Definition at line 1244 of file meta.hpp.

    +

    Definition at line 1243 of file meta.hpp.

    @@ -602,7 +605,7 @@ template<typename Op > diff --git a/structentt_1_1meta__handle-members.html b/structentt_1_1meta__handle-members.html index fb9dc2704..abb62b1bb 100644 --- a/structentt_1_1meta__handle-members.html +++ b/structentt_1_1meta__handle-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */
      template<typename Type >  meta_handle (Type &&value) ENTT_NOEXCEPT - Creates an alias for the actual object. More...
    + Creates an alias for the actual object. More...
      meta_any operator* () const - Indirection operator for aliasing construction. More...
    + Indirection operator for aliasing construction. More...
     

    Detailed Description

    Opaque pointers to instances of any type.

    -

    A handle doesn't perform copies and isn't responsible for the contained object. It doesn't prolong the lifetime of the pointed instance.
    +

    A handle doesn't perform copies and isn't responsible for the contained object. It doesn't prolong the lifetime of the pointed instance.
    Handles are used mainly to gnerate aliases for actual objects when needed.

    -

    Definition at line 655 of file meta.hpp.

    +

    Definition at line 626 of file meta.hpp.

    Constructor & Destructor Documentation

    ◆ meta_handle()

    @@ -137,7 +140,7 @@ template<typename Type >
    -

    Definition at line 665 of file meta.hpp.

    +

    Definition at line 636 of file meta.hpp.

    @@ -168,7 +171,7 @@ template<typename Type >

    Indirection operator for aliasing construction.

    Returns
    An alias to the contained object.
    -

    Definition at line 677 of file meta.hpp.

    +

    Definition at line 648 of file meta.hpp.

    @@ -180,7 +183,7 @@ template<typename Type > diff --git a/structentt_1_1meta__prop-members.html b/structentt_1_1meta__prop-members.html index a15af2734..218aea9ae 100644 --- a/structentt_1_1meta__prop-members.html +++ b/structentt_1_1meta__prop-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

     meta_prop (const internal::meta_prop_node *curr=nullptr) ENTT_NOEXCEPT - Constructs an instance from a given node. More...
    + Constructs an instance from a given node. More...
      meta_any key () const ENTT_NOEXCEPT - Returns the stored key. More...
    + Returns the stored key. More...
      meta_any value () const ENTT_NOEXCEPT - Returns the stored value. More...
    + Returns the stored value. More...
       operator bool () const ENTT_NOEXCEPT - Returns true if a meta object is valid, false otherwise. More...
    + Returns true if a meta object is valid, false otherwise. More...
      bool operator== (const meta_prop &other) const ENTT_NOEXCEPT - Checks if two meta objects refer to the same node. More...
    + Checks if two meta objects refer to the same node. More...
     

    Detailed Description

    Opaque container for meta properties of any type.

    -

    Definition at line 771 of file meta.hpp.

    +

    Definition at line 770 of file meta.hpp.

    Constructor & Destructor Documentation

    ◆ meta_prop()

    @@ -131,7 +134,7 @@ Public Member Functions -

    Definition at line 776 of file meta.hpp.

    +

    Definition at line 775 of file meta.hpp.

    @@ -162,7 +165,7 @@ Public Member Functions

    Returns the stored key.

    Returns
    A meta any containing the key stored with the given property.
    -

    Definition at line 784 of file meta.hpp.

    +

    Definition at line 783 of file meta.hpp.

    @@ -192,7 +195,7 @@ Public Member Functions

    Returns true if a meta object is valid, false otherwise.

    Returns
    True if the meta object is valid, false otherwise.
    -

    Definition at line 800 of file meta.hpp.

    +

    Definition at line 799 of file meta.hpp.

    @@ -229,7 +232,7 @@ Public Member Functions
    Returns
    True if the two meta objects refer to the same node, false otherwise.
    -

    Definition at line 810 of file meta.hpp.

    +

    Definition at line 809 of file meta.hpp.

    @@ -259,7 +262,7 @@ Public Member Functions

    Returns the stored value.

    Returns
    A meta any containing the value stored with the given property.
    -

    Definition at line 792 of file meta.hpp.

    +

    Definition at line 791 of file meta.hpp.

    @@ -271,7 +274,7 @@ Public Member Functions diff --git a/structentt_1_1monostate-members.html b/structentt_1_1monostate-members.html index adcaad368..eda6d450c 100644 --- a/structentt_1_1monostate-members.html +++ b/structentt_1_1monostate-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */ - + +/* @license-end */
    template<typename Type > void operator= (Type val) const ENTT_NOEXCEPT - Assigns a value of a specific type to a given key. More...
    + Assigns a value of a specific type to a given key. More...
      template<typename Type >  operator Type () const ENTT_NOEXCEPT - Gets a value of a specific type for a given key. More...
    + Gets a value of a specific type for a given key. More...
     

    Detailed Description

    @@ -92,7 +95,7 @@ Public Member Functions struct entt::monostate< ENTT_ID_TYPE >

    Minimal implementation of the monostate pattern.

    -

    A minimal, yet complete configuration system built on top of the monostate pattern. Thread safe by design, it works only with basic types like ints or bools.
    +

    A minimal, yet complete configuration system built on top of the monostate pattern. Thread safe by design, it works only with basic types like ints or bools.
    Multiple types and therefore more than one value can be associated with a single key. Because of this, users must pay attention to use the same type both during an assignment and when they try to read back their data. Otherwise, they can incur in unexpected results.

    Definition at line 24 of file monostate.hpp.

    @@ -191,7 +194,7 @@ template<typename Type >
    diff --git a/structentt_1_1named__type__traits.html b/structentt_1_1named__type__traits.html index 7f9fed842..9c1a294ec 100644 --- a/structentt_1_1named__type__traits.html +++ b/structentt_1_1named__type__traits.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::named_type_traits< typename > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */
    diff --git a/structentt_1_1named__type__traits_3_01const_01Type_01_4.html b/structentt_1_1named__type__traits_3_01const_01Type_01_4.html index 3acb0b08a..c036c7921 100644 --- a/structentt_1_1named__type__traits_3_01const_01Type_01_4.html +++ b/structentt_1_1named__type__traits_3_01const_01Type_01_4.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::named_type_traits< const Type > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    Inheritance graph
    - + +
    [legend]
    @@ -85,7 +89,8 @@ Collaboration diagram for entt::named_type_traits< const Type >:
    Collaboration graph
    - + +
    [legend]

    Detailed Description

    @@ -109,7 +114,7 @@ struct entt::named_type_traits< const Type > diff --git a/structentt_1_1named__type__traits_3_01const_01Type_01_4__coll__graph.map b/structentt_1_1named__type__traits_3_01const_01Type_01_4__coll__graph.map index 68e66aa2f..8aa89fb18 100644 --- a/structentt_1_1named__type__traits_3_01const_01Type_01_4__coll__graph.map +++ b/structentt_1_1named__type__traits_3_01const_01Type_01_4__coll__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/structentt_1_1named__type__traits_3_01const_01Type_01_4__coll__graph.md5 b/structentt_1_1named__type__traits_3_01const_01Type_01_4__coll__graph.md5 index 7d6fc6a65..08de4d9fe 100644 --- a/structentt_1_1named__type__traits_3_01const_01Type_01_4__coll__graph.md5 +++ b/structentt_1_1named__type__traits_3_01const_01Type_01_4__coll__graph.md5 @@ -1 +1 @@ -af406f619646e2f2b7f5ca50a3ab5393 \ No newline at end of file +a07b5b831cc3bbbe49a238fd7a299736 \ No newline at end of file diff --git a/structentt_1_1named__type__traits_3_01const_01Type_01_4__inherit__graph.map b/structentt_1_1named__type__traits_3_01const_01Type_01_4__inherit__graph.map index 68e66aa2f..8aa89fb18 100644 --- a/structentt_1_1named__type__traits_3_01const_01Type_01_4__inherit__graph.map +++ b/structentt_1_1named__type__traits_3_01const_01Type_01_4__inherit__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/structentt_1_1named__type__traits_3_01const_01Type_01_4__inherit__graph.md5 b/structentt_1_1named__type__traits_3_01const_01Type_01_4__inherit__graph.md5 index c086f65c5..08de4d9fe 100644 --- a/structentt_1_1named__type__traits_3_01const_01Type_01_4__inherit__graph.md5 +++ b/structentt_1_1named__type__traits_3_01const_01Type_01_4__inherit__graph.md5 @@ -1 +1 @@ -c1b62f210feb840c8882c017c960512b \ No newline at end of file +a07b5b831cc3bbbe49a238fd7a299736 \ No newline at end of file diff --git a/structentt_1_1overloaded.html b/structentt_1_1overloaded.html index 7334a402b..0e2cfa1d1 100644 --- a/structentt_1_1overloaded.html +++ b/structentt_1_1overloaded.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::overloaded< Func > Struct Template Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    Inheritance graph
    + + + +
    [legend]
    Collaboration diagram for entt::overloaded< Func >:
    Collaboration graph
    + + + +
    [legend]

    Detailed Description

    template<class... Func>
    @@ -103,7 +114,7 @@ struct entt::overloaded< Func >

    diff --git a/structentt_1_1overloaded__coll__graph.map b/structentt_1_1overloaded__coll__graph.map index 0e3e0a3b7..b68fe2c40 100644 --- a/structentt_1_1overloaded__coll__graph.map +++ b/structentt_1_1overloaded__coll__graph.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1overloaded__coll__graph.md5 b/structentt_1_1overloaded__coll__graph.md5 index 87c62d7dd..efedfea57 100644 --- a/structentt_1_1overloaded__coll__graph.md5 +++ b/structentt_1_1overloaded__coll__graph.md5 @@ -1 +1 @@ -d553af46b875c78c3f87249a108cdf95 \ No newline at end of file +0b595e8a5f6f32f1853f971769cba668 \ No newline at end of file diff --git a/structentt_1_1overloaded__inherit__graph.map b/structentt_1_1overloaded__inherit__graph.map index 0e3e0a3b7..b68fe2c40 100644 --- a/structentt_1_1overloaded__inherit__graph.map +++ b/structentt_1_1overloaded__inherit__graph.map @@ -1,2 +1,4 @@ + + diff --git a/structentt_1_1overloaded__inherit__graph.md5 b/structentt_1_1overloaded__inherit__graph.md5 index 741e250ae..efedfea57 100644 --- a/structentt_1_1overloaded__inherit__graph.md5 +++ b/structentt_1_1overloaded__inherit__graph.md5 @@ -1 +1 @@ -070be0ed8d751e2cbf40b09e1f714d68 \ No newline at end of file +0b595e8a5f6f32f1853f971769cba668 \ No newline at end of file diff --git a/structentt_1_1process__adaptor-members.html b/structentt_1_1process__adaptor-members.html index 9e95e647d..14032cc0b 100644 --- a/structentt_1_1process__adaptor-members.html +++ b/structentt_1_1process__adaptor-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */ - + +/* @license-end */
    Inheritance graph
    - + + +
    [legend]
    @@ -88,7 +93,9 @@ Collaboration diagram for entt::process_adaptor< Func, Delta >:
    Collaboration graph
    - + + +
    [legend]
    @@ -96,10 +103,10 @@ Collaboration diagram for entt::process_adaptor< Func, Delta >: Public Member Functions - + - + @@ -151,10 +158,11 @@ using  @@ -30,18 +30,21 @@
    template<typename... Args>
     process_adaptor (Args &&... args)
     Constructs a process adaptor from a lambda or a functor. More...
     Constructs a process adaptor from a lambda or a functor. More...
     
    void update (const Delta delta, void *data)
     Updates a process and its internal state if required. More...
     Updates a process and its internal state if required. More...
     
    - Public Member Functions inherited from entt::process< process_adaptor< Func, Delta >, Delta >
    void tick (const Delta delta, void *data=nullptr)

    Where:

    +
    void(Delta delta, void *data, auto succeed, auto fail);
    +

    Where:

    • delta is the elapsed time.
    • data is an opaque pointer to user data if any, nullptr otherwise.
    • @@ -162,10 +170,11 @@ struct entt::process_adaptor< Func, Delta >
    • fail is a function to call when a process terminates with errors.

    The signature of the function call operator of both succeed and fail is equivalent to the following:

    -
    void();

    Usually users shouldn't worry about creating adaptors. A scheduler will create them internally each and avery time a lambda or a functor is used as a process.

    -
    See also
    process
    +
    void();
    +

    Usually users shouldn't worry about creating adaptors. A scheduler will create them internally each and avery time a lambda or a functor is used as a process.

    +
    See also
    process
    -scheduler
    +scheduler
    Template Parameters
    @@ -276,11 +285,13 @@ template<typename Func, typename Delta>
  • src/entt/process/process.hpp
  • +
    void fail() ENTT_NOEXCEPT
    Terminates a process with errors if it's still alive.
    Definition: process.hpp:139
    +
    void succeed() ENTT_NOEXCEPT
    Terminates a process with success if it's still alive.
    Definition: process.hpp:127
    diff --git a/structentt_1_1process__adaptor__coll__graph.map b/structentt_1_1process__adaptor__coll__graph.map index c144d60e1..ba534acc1 100644 --- a/structentt_1_1process__adaptor__coll__graph.map +++ b/structentt_1_1process__adaptor__coll__graph.map @@ -1,3 +1,5 @@ - + + + diff --git a/structentt_1_1process__adaptor__coll__graph.md5 b/structentt_1_1process__adaptor__coll__graph.md5 index 13d452590..e77dcf82b 100644 --- a/structentt_1_1process__adaptor__coll__graph.md5 +++ b/structentt_1_1process__adaptor__coll__graph.md5 @@ -1 +1 @@ -be60efd3d08498098f5627e9d88e9562 \ No newline at end of file +ba5f33d7962574368ed298030d988036 \ No newline at end of file diff --git a/structentt_1_1process__adaptor__inherit__graph.map b/structentt_1_1process__adaptor__inherit__graph.map index c144d60e1..ba534acc1 100644 --- a/structentt_1_1process__adaptor__inherit__graph.map +++ b/structentt_1_1process__adaptor__inherit__graph.map @@ -1,3 +1,5 @@ - + + + diff --git a/structentt_1_1process__adaptor__inherit__graph.md5 b/structentt_1_1process__adaptor__inherit__graph.md5 index fc2c324f3..e77dcf82b 100644 --- a/structentt_1_1process__adaptor__inherit__graph.md5 +++ b/structentt_1_1process__adaptor__inherit__graph.md5 @@ -1 +1 @@ -d4249c5b7ebfd4467b94d2c46e1d2054 \ No newline at end of file +ba5f33d7962574368ed298030d988036 \ No newline at end of file diff --git a/structentt_1_1radix__sort-members.html b/structentt_1_1radix__sort-members.html index 4629cc239..7e9634586 100644 --- a/structentt_1_1radix__sort-members.html +++ b/structentt_1_1radix__sort-members.html @@ -1,9 +1,9 @@ - + - +EnTT: Member List @@ -22,7 +22,7 @@ @@ -30,18 +30,21 @@
    FuncActual type of process.
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */
    EnTT -  3.2.1 +  3.2.2
    - + +/* @license-end */
    template<typename It , typename Getter = identity> void operator() (It first, It last, Getter getter=Getter{}) const - Sorts the elements in a range. More...
    + Sorts the elements in a range. More...
     

    Detailed Description

    @@ -173,7 +176,7 @@ template<typename It , typename Getter = identity>
    diff --git a/structentt_1_1scoped__connection-members.html b/structentt_1_1scoped__connection-members.html index 6798dfae7..7ed8e89c0 100644 --- a/structentt_1_1scoped__connection-members.html +++ b/structentt_1_1scoped__connection-members.html @@ -1,9 +1,9 @@ - + - + EnTT: Member List @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@
    - + +/* @license-end */
    This is the complete list of members for entt::scoped_connection, including all inherited members.

    - - - - - - - - - - + + + + + + +
    connection()=defaultentt::connectionprivate
    connection(const connection &)=defaultentt::connectionprivate
    connection(connection &&other)entt::connectioninlineprivate
    operator bool() const ENTT_NOEXCEPTentt::connectioninlineexplicitprivate
    operator=(const scoped_connection &)=deleteentt::scoped_connection
    operator=(scoped_connection &&)=defaultentt::scoped_connection
    operator=(const connection &other)entt::scoped_connectioninline
    operator=(connection &&other)entt::scoped_connectioninline
    release()entt::connectioninlineprivate
    scoped_connection()=defaultentt::scoped_connection
    scoped_connection(const connection &conn)entt::scoped_connectioninline
    scoped_connection(const scoped_connection &)=deleteentt::scoped_connection
    scoped_connection(scoped_connection &&)=defaultentt::scoped_connection
    ~scoped_connection()entt::scoped_connectioninline
    release()entt::scoped_connectioninline
    entt::connection::release()entt::connectioninlineprivate
    scoped_connection()=defaultentt::scoped_connection
    scoped_connection(const connection &conn)entt::scoped_connectioninline
    scoped_connection(const scoped_connection &)=deleteentt::scoped_connection
    scoped_connection(scoped_connection &&)=defaultentt::scoped_connection
    ~scoped_connection()entt::scoped_connectioninline
    diff --git a/structentt_1_1scoped__connection.html b/structentt_1_1scoped__connection.html index 4482071e9..2595e984d 100644 --- a/structentt_1_1scoped__connection.html +++ b/structentt_1_1scoped__connection.html @@ -1,9 +1,9 @@ - + - + EnTT: entt::scoped_connection Struct Reference @@ -22,7 +22,7 @@
    EnTT -  3.2.1 +  3.2.2
    @@ -30,18 +30,21 @@ - + +/* @license-end */
    Inheritance graph
    - + +
    [legend]
    @@ -88,7 +92,8 @@ Collaboration diagram for entt::scoped_connection:
    Collaboration graph
    - + +
    [legend]
    @@ -99,7 +104,7 @@ Public Member Functions - + @@ -114,21 +119,25 @@ Public Member Functions - + - + - + - + + + +
     Default constructor.
     
     scoped_connection (const connection &conn)
     Constructs a scoped connection from a basic connection. More...
     Constructs a scoped connection from a basic connection. More...
     
     scoped_connection (const scoped_connection &)=delete
     Automatically breaks the link on destruction.
     
    scoped_connectionoperator= (const scoped_connection &)=delete
     Default copy assignment operator, deleted on purpose. More...
     Default copy assignment operator, deleted on purpose. More...
     
    scoped_connectionoperator= (scoped_connection &&)=default
     Default move assignment operator. More...
     Default move assignment operator. More...
     
    scoped_connectionoperator= (const connection &other)
     Copies a connection. More...
     Copies a connection. More...
     
    scoped_connectionoperator= (connection &&other)
     Moves a connection. More...
     Moves a connection. More...
     
    +void release ()
     Breaks the connection.
     

    Detailed Description

    Scoped connection class.

    -

    Opaque object the aim of which is to allow users to release an already estabilished connection without having to keep a reference to the signal or the sink that generated it.
    +

    Opaque object the aim of which is to allow users to release an already estabilished connection without having to keep a reference to the signal or the sink that generated it.
    A scoped connection automatically breaks the link between the two objects when it goes out of scope.

    Definition at line 228 of file sigh.hpp.

    @@ -170,103 +179,8 @@ Public Member Functions

    Member Function Documentation

    - -

    ◆ operator=() [1/4]

    - -
    -
    - - - - - -
    - - - - - - - - -
    scoped_connection& entt::scoped_connection::operator= (const scoped_connection)
    -
    -delete
    -
    - -

    Default copy assignment operator, deleted on purpose.

    -
    Returns
    This scoped connection.
    - -
    -
    - -

    ◆ operator=() [2/4]

    - -
    -
    - - - - - -
    - - - - - - - - -
    scoped_connection& entt::scoped_connection::operator= (scoped_connection && )
    -
    -default
    -
    - -

    Default move assignment operator.

    -
    Returns
    This scoped connection.
    - -
    -
    - -

    ◆ operator=() [3/4]

    - -
    -
    - - - - - -
    - - - - - - - - -
    scoped_connection& entt::scoped_connection::operator= (const connectionother)
    -
    -inline
    -
    - -

    Copies a connection.

    -
    Parameters
    - - -
    otherThe connection object to copy.
    -
    -
    -
    Returns
    This scoped connection.
    - -

    Definition at line 271 of file sigh.hpp.

    - -
    -
    -

    ◆ operator=() [4/4]

    +

    ◆ operator=() [1/4]

    @@ -300,6 +214,101 @@ Public Member Functions

    Definition at line 281 of file sigh.hpp.

    +
    +
    + +

    ◆ operator=() [2/4]

    + +
    +
    + + + + + +
    + + + + + + + + +
    scoped_connection& entt::scoped_connection::operator= (const connectionother)
    +
    +inline
    +
    + +

    Copies a connection.

    +
    Parameters
    + + +
    otherThe connection object to copy.
    +
    +
    +
    Returns
    This scoped connection.
    + +

    Definition at line 271 of file sigh.hpp.

    + +
    +
    + +

    ◆ operator=() [3/4]

    + +
    +
    + + + + + +
    + + + + + + + + +
    scoped_connection& entt::scoped_connection::operator= (const scoped_connection)
    +
    +delete
    +
    + +

    Default copy assignment operator, deleted on purpose.

    +
    Returns
    This scoped connection.
    + +
    +
    + +

    ◆ operator=() [4/4]

    + +
    +
    + + + + + +
    + + + + + + + + +
    scoped_connection& entt::scoped_connection::operator= (scoped_connection && )
    +
    +default
    +
    + +

    Default move assignment operator.

    +
    Returns
    This scoped connection.
    +

    The documentation for this struct was generated from the following file: