dummy asset dependencies classes

This commit is contained in:
2019-04-14 20:32:29 +07:00
parent 6fbf5a15d5
commit 53fefff3f3
5 changed files with 111 additions and 26 deletions

View File

@@ -53,6 +53,13 @@ namespace e2d
class asset_cache;
class asset_cache_base;
template < typename Asset >
class asset_dependency;
class asset_dependency_base;
class asset_factory;
class asset_dependencies;
class library;
class atlas;

View File

@@ -142,6 +142,49 @@ namespace e2d
std::mutex mutex_;
hash_map<str_hash, asset_creator> creators_;
};
//
// asset_dependency_base
//
class asset_dependency_base;
using asset_dependency_base_iptr = intrusive_ptr<asset_dependency_base>;
class asset_dependency_base
: private noncopyable
, public ref_counter<asset_dependency_base> {
public:
asset_dependency_base(str_view address);
virtual ~asset_dependency_base() noexcept;
private:
str address_;
};
//
// asset_dependency
//
template < typename Asset >
class asset_dependency : public asset_dependency_base {
public:
asset_dependency(str_view address);
~asset_dependency() noexcept override;
};
//
// asset_dependencies
//
class asset_dependencies final {
public:
asset_dependencies() = default;
~asset_dependencies() noexcept = default;
template < typename Asset >
asset_dependencies& dependency(str_view address);
private:
vector<asset_dependency_base_iptr> dependencies_;
};
}
#include "asset.inl"

View File

@@ -145,6 +145,23 @@ namespace e2d
}
return *this;
}
//
// asset_dependency
//
template < typename Asset >
asset_dependency<Asset>::asset_dependency(str_view address)
: asset_dependency_base(address) {}
template < typename Asset >
asset_dependency<Asset>::~asset_dependency() noexcept = default;
template < typename Asset >
asset_dependencies& asset_dependencies::dependency(str_view address) {
dependencies_.push_back(new asset_dependency<Asset>(address));
return *this;
}
}
#endif

View File

@@ -46,4 +46,13 @@ namespace e2d
asset_factory::asset_factory() = default;
asset_factory::~asset_factory() noexcept = default;
//
// asset_dependency_base
//
asset_dependency_base::asset_dependency_base(str_view address)
: address_(address) {}
asset_dependency_base::~asset_dependency_base() noexcept = default;
}

View File

@@ -44,36 +44,45 @@ namespace
};
}
TEST_CASE("asset"){
TEST_CASE("asset") {
safe_starter_initializer initializer;
library& l = the<library>();
{
REQUIRE_FALSE(l.load_asset<fake_asset>("none"));
SECTION("nested_assets") {
{
REQUIRE_FALSE(l.load_asset<fake_asset>("none"));
auto fa = l.load_asset<fake_asset>("42");
REQUIRE(fa);
REQUIRE(fa->content() == 42);
auto fa = l.load_asset<fake_asset>("42");
REQUIRE(fa);
REQUIRE(fa->content() == 42);
REQUIRE_FALSE(fa->find_nested_asset("none"));
REQUIRE(fa->find_nested_asset("21"));
REQUIRE_FALSE(fa->find_nested_asset<binary_asset>("21"));
REQUIRE(fa->find_nested_asset<fake_nested_asset>("21"));
REQUIRE(fa->find_nested_asset<fake_nested_asset>("21")->content() == 21);
REQUIRE(fa->find_nested_asset<fake_nested_asset>("84")->content() == 84);
REQUIRE_FALSE(fa->find_nested_asset("none"));
REQUIRE(fa->find_nested_asset("21"));
REQUIRE_FALSE(fa->find_nested_asset<binary_asset>("21"));
REQUIRE(fa->find_nested_asset<fake_nested_asset>("21"));
REQUIRE(fa->find_nested_asset<fake_nested_asset>("21")->content() == 21);
REQUIRE(fa->find_nested_asset<fake_nested_asset>("84")->content() == 84);
}
{
REQUIRE(l.load_asset<fake_asset, fake_nested_asset>("42:/21"));
REQUIRE(l.load_asset<fake_asset, fake_nested_asset>("42:/21")->content() == 21);
REQUIRE_FALSE(l.load_asset<fake_asset, binary_asset>("42:/21"));
REQUIRE_FALSE(l.load_asset<fake_asset, fake_nested_asset>("42:/none"));
REQUIRE_FALSE(l.load_asset<fake_asset, fake_nested_asset>("42:/none:/21"));
REQUIRE(l.load_asset<fake_asset, fake_nested_asset>("42:/21:/2"));
REQUIRE(l.load_asset<fake_asset, fake_nested_asset>("42:/21:/2")->content() == 2);
REQUIRE_FALSE(l.load_asset<fake_asset, binary_asset>("42:/21:/2"));
REQUIRE_FALSE(l.load_asset<fake_asset, fake_nested_asset>("42:/21:/none"));
REQUIRE_FALSE(l.load_asset<fake_asset, fake_nested_asset>("42:/21:/none:/2"));
}
}
{
REQUIRE(l.load_asset<fake_asset, fake_nested_asset>("42:/21"));
REQUIRE(l.load_asset<fake_asset, fake_nested_asset>("42:/21")->content() == 21);
REQUIRE_FALSE(l.load_asset<fake_asset, binary_asset>("42:/21"));
REQUIRE_FALSE(l.load_asset<fake_asset, fake_nested_asset>("42:/none"));
REQUIRE_FALSE(l.load_asset<fake_asset, fake_nested_asset>("42:/none:/21"));
REQUIRE(l.load_asset<fake_asset, fake_nested_asset>("42:/21:/2"));
REQUIRE(l.load_asset<fake_asset, fake_nested_asset>("42:/21:/2")->content() == 2);
REQUIRE_FALSE(l.load_asset<fake_asset, binary_asset>("42:/21:/2"));
REQUIRE_FALSE(l.load_asset<fake_asset, fake_nested_asset>("42:/21:/none"));
REQUIRE_FALSE(l.load_asset<fake_asset, fake_nested_asset>("42:/21:/none:/2"));
SECTION("asset_dependencies") {
{
const auto ad = asset_dependencies()
.dependency<text_asset>("text_asset.txt")
.dependency<binary_asset>("binary_asset.bin");
}
}
}