From 931fe695e1c61ee6bb56971975c01d0a92cd42dc Mon Sep 17 00:00:00 2001 From: Jan Date: Tue, 23 Apr 2024 00:06:28 +0200 Subject: [PATCH] refactor: use template asset structs for AddAsset api --- .../AssetLoading/IAssetLoadingManager.h | 58 ++++++++++++------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/src/ObjLoading/AssetLoading/IAssetLoadingManager.h b/src/ObjLoading/AssetLoading/IAssetLoadingManager.h index 398a6515..a8c2f64f 100644 --- a/src/ObjLoading/AssetLoading/IAssetLoadingManager.h +++ b/src/ObjLoading/AssetLoading/IAssetLoadingManager.h @@ -19,36 +19,53 @@ public: _NODISCARD virtual AssetLoadingContext* GetAssetLoadingContext() const = 0; - virtual XAssetInfoGeneric* AddAsset(std::unique_ptr xAssetInfo) = 0; - - XAssetInfoGeneric* AddAsset(const asset_type_t assetType, const std::string& assetName, void* asset) + template XAssetInfo* AddAsset(const std::string& assetName, typename AssetType::Type* asset) { - return AddAsset(assetType, assetName, asset, std::vector(), std::vector()); + static_assert(std::is_base_of_v); + + return static_cast*>(AddAsset(std::make_unique( + AssetType::EnumEntry, assetName, asset, std::vector(), std::vector(), std::vector()))); } - XAssetInfoGeneric* AddAsset(const asset_type_t assetType, const std::string& assetName, void* asset, std::vector dependencies) + template + XAssetInfo* AddAsset(const std::string& assetName, typename AssetType::Type* asset, std::vector dependencies) { - return AddAsset(assetType, assetName, asset, std::move(dependencies), std::vector()); + static_assert(std::is_base_of_v); + + return static_cast*>(AddAsset(std::make_unique( + AssetType::EnumEntry, assetName, asset, std::move(dependencies), std::vector(), std::vector()))); } - XAssetInfoGeneric* AddAsset(const asset_type_t assetType, - const std::string& assetName, - void* asset, - std::vector dependencies, - std::vector usedScriptStrings) + template + XAssetInfo* AddAsset(const std::string& assetName, + typename AssetType::Type* asset, + std::vector dependencies, + std::vector usedScriptStrings) { - return AddAsset(assetType, assetName, asset, std::move(dependencies), std::move(usedScriptStrings), std::vector()); + static_assert(std::is_base_of_v); + + return static_cast*>(AddAsset(std::make_unique( + AssetType::EnumEntry, assetName, asset, std::move(dependencies), std::move(usedScriptStrings), std::vector()))); } - XAssetInfoGeneric* AddAsset(const asset_type_t assetType, - const std::string& assetName, - void* asset, - std::vector dependencies, - std::vector usedScriptStrings, - std::vector indirectAssetReferences) + template + XAssetInfo* AddAsset(const std::string& assetName, + typename AssetType::Type* asset, + std::vector dependencies, + std::vector usedScriptStrings, + std::vector indirectAssetReferences) { - return AddAsset(std::make_unique( - assetType, assetName, asset, std::move(dependencies), std::move(usedScriptStrings), std::move(indirectAssetReferences))); + static_assert(std::is_base_of_v); + + return static_cast*>(AddAsset(std::make_unique( + AssetType::EnumEntry, assetName, asset, std::move(dependencies), std::move(usedScriptStrings), std::move(indirectAssetReferences)))); + } + + template XAssetInfo* AddAsset(std::unique_ptr> xAssetInfo) + { + static_assert(std::is_base_of_v); + + return static_cast*>(AddAsset(std::unique_ptr(xAssetInfo.release()))); } template XAssetInfo* LoadDependency(const std::string& assetName) @@ -66,6 +83,7 @@ public: } protected: + virtual XAssetInfoGeneric* AddAsset(std::unique_ptr xAssetInfo) = 0; virtual XAssetInfoGeneric* LoadDependency(asset_type_t assetType, const std::string& assetName) = 0; virtual IndirectAssetReference LoadIndirectAssetReference(asset_type_t assetType, const std::string& assetName) = 0; };