|
|
@@ -7,7 +7,6 @@
|
|
|
#include <entt/core/type_info.hpp>
|
|
|
#include <entt/resource/cache.hpp>
|
|
|
#include <entt/resource/handle.hpp>
|
|
|
-#include <entt/resource/loader.hpp>
|
|
|
|
|
|
struct resource {
|
|
|
virtual ~resource() = default;
|
|
|
@@ -26,21 +25,20 @@ struct derived_resource: resource {
|
|
|
};
|
|
|
|
|
|
template<typename Resource>
|
|
|
-struct loader: entt::resource_loader<loader<Resource>, Resource> {
|
|
|
- entt::resource_handle<Resource> load(int value) const {
|
|
|
+struct loader {
|
|
|
+ using value_type = Resource;
|
|
|
+
|
|
|
+ entt::resource_handle<Resource> operator()(int value) const {
|
|
|
+ if(value < 0) {
|
|
|
+ return {};
|
|
|
+ }
|
|
|
+
|
|
|
auto res = std::shared_ptr<Resource>(new Resource);
|
|
|
res->value = value;
|
|
|
return res;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-template<typename Resource>
|
|
|
-struct broken_loader: entt::resource_loader<broken_loader<Resource>, Resource> {
|
|
|
- entt::resource_handle<Resource> load(int) const {
|
|
|
- return {};
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
template<typename Type, typename Other>
|
|
|
entt::resource_handle<Type> dynamic_resource_handle_cast(const entt::resource_handle<Other> &other) {
|
|
|
if(other->type() == entt::type_id<Type>()) {
|
|
|
@@ -51,7 +49,7 @@ entt::resource_handle<Type> dynamic_resource_handle_cast(const entt::resource_ha
|
|
|
}
|
|
|
|
|
|
TEST(Resource, Functionalities) {
|
|
|
- entt::resource_cache<resource> cache;
|
|
|
+ entt::resource_cache<resource, loader<resource>> cache;
|
|
|
|
|
|
constexpr auto hs1 = entt::hashed_string{"res1"};
|
|
|
constexpr auto hs2 = entt::hashed_string{"res2"};
|
|
|
@@ -61,16 +59,16 @@ TEST(Resource, Functionalities) {
|
|
|
ASSERT_FALSE(cache.contains(hs1));
|
|
|
ASSERT_FALSE(cache.contains(hs2));
|
|
|
|
|
|
- ASSERT_FALSE(cache.load<broken_loader<resource>>(hs1, 42));
|
|
|
- ASSERT_FALSE(cache.reload<broken_loader<resource>>(hs1, 42));
|
|
|
+ ASSERT_FALSE(cache.load(hs1, -1));
|
|
|
+ ASSERT_FALSE(cache.reload(hs1, -1));
|
|
|
|
|
|
ASSERT_EQ(cache.size(), 0u);
|
|
|
ASSERT_TRUE(cache.empty());
|
|
|
ASSERT_FALSE(cache.contains(hs1));
|
|
|
ASSERT_FALSE(cache.contains(hs2));
|
|
|
|
|
|
- ASSERT_TRUE(cache.load<loader<resource>>(hs1, 42));
|
|
|
- ASSERT_TRUE(cache.reload<loader<resource>>(hs1, 42));
|
|
|
+ ASSERT_TRUE(cache.load(hs1, 42));
|
|
|
+ ASSERT_TRUE(cache.reload(hs1, 42));
|
|
|
|
|
|
ASSERT_EQ(cache.handle(hs1).use_count(), 2);
|
|
|
|
|
|
@@ -90,8 +88,8 @@ TEST(Resource, Functionalities) {
|
|
|
ASSERT_FALSE(cache.contains(hs2));
|
|
|
ASSERT_EQ((*std::as_const(cache).handle(hs1)).value, 42);
|
|
|
|
|
|
- ASSERT_TRUE(cache.load<loader<resource>>(hs1, 42));
|
|
|
- ASSERT_TRUE(cache.load<loader<resource>>(hs2, 42));
|
|
|
+ ASSERT_TRUE(cache.load(hs1, 42));
|
|
|
+ ASSERT_TRUE(cache.load(hs2, 42));
|
|
|
|
|
|
ASSERT_NE(cache.size(), 0u);
|
|
|
ASSERT_FALSE(cache.empty());
|
|
|
@@ -106,7 +104,7 @@ TEST(Resource, Functionalities) {
|
|
|
ASSERT_TRUE(cache.contains(hs2));
|
|
|
ASSERT_EQ(cache.handle(hs2)->value, 42);
|
|
|
|
|
|
- ASSERT_TRUE(cache.load<loader<resource>>(hs1, 42));
|
|
|
+ ASSERT_TRUE(cache.load(hs1, 42));
|
|
|
ASSERT_NO_FATAL_FAILURE(cache.clear());
|
|
|
|
|
|
ASSERT_EQ(cache.size(), 0u);
|
|
|
@@ -114,7 +112,7 @@ TEST(Resource, Functionalities) {
|
|
|
ASSERT_FALSE(cache.contains(hs1));
|
|
|
ASSERT_FALSE(cache.contains(hs2));
|
|
|
|
|
|
- ASSERT_TRUE(cache.load<loader<resource>>(hs1, 42));
|
|
|
+ ASSERT_TRUE(cache.load(hs1, 42));
|
|
|
|
|
|
ASSERT_NE(cache.size(), 0u);
|
|
|
ASSERT_FALSE(cache.empty());
|
|
|
@@ -130,7 +128,7 @@ TEST(Resource, Functionalities) {
|
|
|
ASSERT_EQ(cache.size(), 0u);
|
|
|
ASSERT_TRUE(cache.empty());
|
|
|
|
|
|
- ASSERT_TRUE(cache.temp<loader<resource>>(42));
|
|
|
+ ASSERT_TRUE(cache.temp(42));
|
|
|
ASSERT_TRUE(cache.empty());
|
|
|
|
|
|
ASSERT_FALSE(entt::resource_handle<resource>{});
|
|
|
@@ -141,9 +139,9 @@ TEST(Resource, Functionalities) {
|
|
|
}
|
|
|
|
|
|
TEST(Resource, ConstNonConstHandle) {
|
|
|
- entt::resource_cache<resource> cache;
|
|
|
+ entt::resource_cache<resource, loader<resource>> cache;
|
|
|
|
|
|
- entt::resource_handle<resource> handle = cache.temp<loader<resource>>(42);
|
|
|
+ entt::resource_handle<resource> handle = cache.temp(42);
|
|
|
entt::resource_handle<const resource> chandle = handle;
|
|
|
|
|
|
static_assert(std::is_same_v<decltype(handle.get()), resource &>);
|
|
|
@@ -163,10 +161,10 @@ TEST(Resource, ConstNonConstHandle) {
|
|
|
}
|
|
|
|
|
|
TEST(Resource, MutableHandle) {
|
|
|
- entt::resource_cache<resource> cache;
|
|
|
+ entt::resource_cache<resource, loader<resource>> cache;
|
|
|
|
|
|
constexpr auto hs = entt::hashed_string{"res"};
|
|
|
- auto handle = cache.load<loader<resource>>(hs, 0);
|
|
|
+ auto handle = cache.load(hs, 0);
|
|
|
|
|
|
ASSERT_TRUE(handle);
|
|
|
|
|
|
@@ -179,8 +177,8 @@ TEST(Resource, MutableHandle) {
|
|
|
}
|
|
|
|
|
|
TEST(Resource, HandleImplicitCast) {
|
|
|
- entt::resource_cache<resource> cache;
|
|
|
- auto handle = cache.temp<loader<derived_resource>>(0);
|
|
|
+ entt::resource_cache<resource, loader<derived_resource>> cache;
|
|
|
+ auto handle = cache.temp(0);
|
|
|
|
|
|
auto resource = std::make_shared<derived_resource>();
|
|
|
entt::resource_handle<derived_resource> other{resource};
|
|
|
@@ -216,7 +214,7 @@ TEST(Resource, HandleImplicitCast) {
|
|
|
}
|
|
|
|
|
|
TEST(Resource, DynamicResourceHandleCast) {
|
|
|
- entt::resource_handle<derived_resource> handle = entt::resource_cache<derived_resource>{}.temp<loader<derived_resource>>(42);
|
|
|
+ entt::resource_handle<derived_resource> handle = entt::resource_cache<derived_resource, loader<derived_resource>>{}.temp(42);
|
|
|
entt::resource_handle<const resource> base = handle;
|
|
|
|
|
|
ASSERT_TRUE(base);
|
|
|
@@ -229,7 +227,7 @@ TEST(Resource, DynamicResourceHandleCast) {
|
|
|
ASSERT_EQ(handle.use_count(), 3u);
|
|
|
ASSERT_EQ(chandle->value, 42);
|
|
|
|
|
|
- base = entt::resource_cache<resource>{}.temp<loader<resource>>(42);
|
|
|
+ base = entt::resource_cache<resource, loader<resource>>{}.temp(42);
|
|
|
chandle = dynamic_resource_handle_cast<const derived_resource>(base);
|
|
|
|
|
|
ASSERT_FALSE(chandle);
|
|
|
@@ -239,8 +237,8 @@ TEST(Resource, DynamicResourceHandleCast) {
|
|
|
TEST(Resource, Each) {
|
|
|
using namespace entt::literals;
|
|
|
|
|
|
- entt::resource_cache<resource> cache;
|
|
|
- cache.load<loader<resource>>("resource"_hs, 0);
|
|
|
+ entt::resource_cache<resource, loader<resource>> cache;
|
|
|
+ cache.load("resource"_hs, 0);
|
|
|
|
|
|
cache.each([](entt::resource_handle<resource> res) {
|
|
|
++res->value;
|