Michele Caini 7 лет назад
Родитель
Сommit
5fabca3616
1 измененных файлов с 26 добавлено и 29 удалено
  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
 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
 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
 an application while meshes can be associated with a single scene and then
 discarded when users leave it.
 discarded when users leave it.
@@ -103,7 +103,7 @@ const auto empty = cache.empty();
 cache.clear();
 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/>
 discard resources of the given type.<br/>
 Before to explore this part of the interface, it makes sense to mention how
 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:
 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"};
 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.
 details here.
 
 
 Resources are loaded and thus stored in a cache through the `load` member
 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);
 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
 ```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
 ```cpp
 auto exists = cache.contains("my/identifier"_hs);
 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:
 existing resource if needed:
 
 
 ```cpp
 ```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:
 snippet:
 
 
 ```cpp
 ```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.
 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/>
 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
 ```cpp
 auto handle = cache.handle("my/identifier"_hs);
 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,
 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.
 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:
 resource as a const reference on request:
 
 
 * By means of the `get` member function:
 * 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
 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`
 without storing the resource itself in the cache, users can rely on the `temp`
 member function template.<br/>
 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
 ```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.