Changeset View
Changeset View
Standalone View
Standalone View
source/blender/asset_system/intern/asset_storage.cc
| Show All 23 Lines | AssetRepresentation &AssetStorage::add_external_asset(StringRef name, | ||||
| std::unique_ptr<AssetMetaData> metadata) | std::unique_ptr<AssetMetaData> metadata) | ||||
| { | { | ||||
| return *external_assets_.lookup_key_or_add( | return *external_assets_.lookup_key_or_add( | ||||
| std::make_unique<AssetRepresentation>(name, std::move(metadata))); | std::make_unique<AssetRepresentation>(name, std::move(metadata))); | ||||
| } | } | ||||
| bool AssetStorage::remove_asset(AssetRepresentation &asset) | bool AssetStorage::remove_asset(AssetRepresentation &asset) | ||||
| { | { | ||||
| auto remove_if_contained_fn = [&asset](StorageT &storage) { | if (local_id_assets_.remove_as(&asset)) { | ||||
| /* Create a "fake" unique_ptr to figure out the hash for the pointed to asset representation. | |||||
| * The standard requires that this is the same for all unique_ptr's wrapping the same address. | |||||
| */ | |||||
| std::unique_ptr<AssetRepresentation> fake_asset_ptr{&asset}; | |||||
| const std::unique_ptr<AssetRepresentation> *real_asset_ptr = storage.lookup_key_ptr_as( | |||||
| fake_asset_ptr); | |||||
| /* Make sure the contained storage is not destructed. */ | |||||
| fake_asset_ptr.release(); | |||||
| if (!real_asset_ptr) { | |||||
| return false; | |||||
| } | |||||
| storage.remove_contained(*real_asset_ptr); | |||||
| return true; | |||||
| }; | |||||
| if (remove_if_contained_fn(local_id_assets_)) { | |||||
| return true; | return true; | ||||
| } | } | ||||
| return remove_if_contained_fn(external_assets_); | return external_assets_.remove_as(&asset); | ||||
| } | } | ||||
| void AssetStorage::remap_ids_and_remove_invalid(const IDRemapper &mappings) | void AssetStorage::remap_ids_and_remove_invalid(const IDRemapper &mappings) | ||||
| { | { | ||||
| Set<AssetRepresentation *> removed_assets{}; | Set<AssetRepresentation *> removed_assets{}; | ||||
| for (auto &asset_ptr : local_id_assets_) { | for (auto &asset_ptr : local_id_assets_) { | ||||
| AssetRepresentation &asset = *asset_ptr; | AssetRepresentation &asset = *asset_ptr; | ||||
| Show All 17 Lines | |||||