Michele Caini 7 år sedan
förälder
incheckning
5fabca3616
1 ändrade filer med 26 tillägg och 29 borttagningar
  1. 26 29
      docs/md/resource.md

+ 26 - 29
docs/md/resource.md

@@ -84,7 +84,7 @@ my_resource_cache cache{};
 ```
 
 The idea is to create different caches for different types of resources and to
-manage each one independently and in the most appropriate way.<br/>
+manage each one independently in the most appropriate way.<br/>
 As a (very) trivial example, audio tracks can survive in most of the scenes of
 an application while meshes can be associated with a single scene and then
 discarded when users leave it.
@@ -103,7 +103,7 @@ const auto empty = cache.empty();
 cache.clear();
 ```
 
-Besides these member functions, it contains what is needed to load, use and
+Besides these member functions, a cache contains what is needed to load, use and
 discard resources of the given type.<br/>
 Before to explore this part of the interface, it makes sense to mention how
 resources are identified. The type of the identifiers to use is defined as:
@@ -122,7 +122,7 @@ constexpr auto identifier = entt::resource_cache<resource>::resource_type{"my/re
 constexpr auto hs = entt::hashed_string{"my/resource/identifier"};
 ```
 
-The class `hashed_string` is described in a dedicated section, so I won't do in
+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
@@ -137,20 +137,18 @@ cache.load<my_loader>(identifier, 0);
 cache.load<my_loader>("another/identifier"_hs, 42);
 ```
 
-The return value can be used to know if the resource has been loaded correctly.
-In case the loader returns an invalid pointer or the resource already exists in
-the cache, a false value is returned:
+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:
 
 ```cpp
-if(!cache.load<my_loader>("another/identifier"_hs, 42)) {
+if(auto handle = cache.load<my_loader>("another/identifier"_hs, 42); handle) {
     // ...
 }
 ```
 
-Unfortunately, in this case there is no way to know what was the problem
-exactly. However, before trying to load a resource or after an error, one can
-use the `contains` member function to know if a cache already contains a
-specific resource:
+Before trying to load a resource, the `contains` member function can be used to
+know if a cache already contains a specific resource:
 
 ```cpp
 auto exists = cache.contains("my/identifier"_hs);
@@ -160,13 +158,11 @@ There exists also a member function to use to force a reload of an already
 existing resource if needed:
 
 ```cpp
-auto result = cache.reload<my_loader>("another/identifier"_hs, 42);
+auto handle = cache.reload<my_loader>("another/identifier"_hs, 42);
 ```
 
-As above, the function returns true in case of success, false otherwise. The
-sole difference in this case is that an error necessarily means that the loader
-has failed for some reasons to load the resource.<br/>
-Note that the `reload` member function is a kind of alias of the following
+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:
 
 ```cpp
@@ -175,11 +171,11 @@ 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, the
-function does nothing and returns immediately.
+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.<br/>
-They are returned to users in the form of handles. To get one of them:
+They are returned to users in the form of handles. To get one of them later on:
 
 ```cpp
 auto handle = cache.handle("my/identifier"_hs);
@@ -187,10 +183,10 @@ 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 owns a handle and it guarantees that a resource isn't
-destroyed until all the handles are destroyed, even if the resource itself is
-removed from the cache.<br/>
-Handles are tiny objects both movable and copyable. They returns the contained
+Users of a resource own a handle that guarantees that a resource isn't destroyed
+until all the handles are destroyed, even if the resource itself is removed from
+the cache.<br/>
+Handles are tiny objects both movable and copyable. They return the contained
 resource as a const reference on request:
 
 * By means of the `get` member function:
@@ -229,13 +225,14 @@ 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.<br/>
-The declaration is similar to the one of `load` but for the fact that it doesn't
-require a resource identifier and it doesn't return a boolean value. Instead,
-it returns a (possibly invalid) handle for the resource:
+The declaration is similar to that of `load`, a (possibly invalid) handle for
+the resource is returned also in this case:
 
 ```cpp
-auto handle = cache.temp<my_loader>(42);
+if(auto handle = cache.temp<my_loader>(42); handle) {
+    // ...
+}
 ```
 
-Do not forget to test the handle for validity. Otherwise, getting the reference
-to the resource it points may result in undefined behavior.
+Do not forget to test the handle for validity. Otherwise, getting a reference to
+the resource it points may result in undefined behavior.