mirror of
https://github.com/izzy2lost/libultraship.git
synced 2026-06-19 01:16:13 -07:00
UnloadResourceAsync (#766)
* Add `UnloadResourcesAsync` to handle threaded unloading. Make `UnloadResources` non-async. Add common `UnloadResourcesProcess` to handle the actual unloading. * Clang again * Add priority argument to `UnloadResourcesAsync`
This commit is contained in:
@@ -342,24 +342,34 @@ void ResourceManager::DirtyResources(const ResourceFilter& filter) {
|
||||
});
|
||||
}
|
||||
|
||||
void ResourceManager::UnloadResources(const ResourceFilter& filter) {
|
||||
mThreadPool->submit_task([this, filter]() -> void {
|
||||
auto list = GetArchiveManager()->ListFiles(filter.IncludeMasks, filter.ExcludeMasks);
|
||||
|
||||
for (const auto& key : *list.get()) {
|
||||
UnloadResource({ key, mDefaultCacheOwner, mDefaultCacheArchive });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void ResourceManager::DirtyResources(const std::string& searchMask) {
|
||||
DirtyResources({ { searchMask }, {}, mDefaultCacheOwner, mDefaultCacheArchive });
|
||||
}
|
||||
|
||||
void ResourceManager::UnloadResourcesAsync(const std::string& searchMask, BS::priority_t priority) {
|
||||
UnloadResourcesAsync({ { searchMask }, {}, mDefaultCacheOwner, mDefaultCacheArchive }, priority);
|
||||
}
|
||||
|
||||
void ResourceManager::UnloadResourcesAsync(const ResourceFilter& filter, BS::priority_t priority) {
|
||||
mThreadPool->submit_task([this, filter]() -> void { UnloadResourcesProcess(filter); }, priority);
|
||||
}
|
||||
|
||||
void ResourceManager::UnloadResources(const std::string& searchMask) {
|
||||
UnloadResources({ { searchMask }, {}, mDefaultCacheOwner, mDefaultCacheArchive });
|
||||
}
|
||||
|
||||
void ResourceManager::UnloadResources(const ResourceFilter& filter) {
|
||||
UnloadResourcesProcess(filter);
|
||||
}
|
||||
|
||||
void ResourceManager::UnloadResourcesProcess(const ResourceFilter& filter) {
|
||||
auto list = GetArchiveManager()->ListFiles(filter.IncludeMasks, filter.ExcludeMasks);
|
||||
|
||||
for (const auto& key : *list.get()) {
|
||||
UnloadResource({ key, mDefaultCacheOwner, mDefaultCacheArchive });
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<ArchiveManager> ResourceManager::GetArchiveManager() {
|
||||
return mArchiveManager;
|
||||
}
|
||||
|
||||
@@ -95,6 +95,8 @@ class ResourceManager {
|
||||
void DirtyResources(const ResourceFilter& filter);
|
||||
void UnloadResources(const std::string& searchMask);
|
||||
void UnloadResources(const ResourceFilter& filter);
|
||||
void UnloadResourcesAsync(const std::string& searchMask, BS::priority_t priority = BS::pr::normal);
|
||||
void UnloadResourcesAsync(const ResourceFilter& filter, BS::priority_t priority = BS::pr::normal);
|
||||
|
||||
bool OtrSignatureCheck(const char* fileName);
|
||||
bool IsAltAssetsEnabled();
|
||||
@@ -102,6 +104,7 @@ class ResourceManager {
|
||||
|
||||
protected:
|
||||
std::shared_ptr<std::vector<std::shared_ptr<IResource>>> LoadResourcesProcess(const ResourceFilter& filter);
|
||||
void UnloadResourcesProcess(const ResourceFilter& filter);
|
||||
std::variant<ResourceLoadError, std::shared_ptr<IResource>> CheckCache(const ResourceIdentifier& identifier,
|
||||
bool loadExact = false);
|
||||
std::shared_ptr<File> LoadFileProcess(const ResourceIdentifier& identifier,
|
||||
|
||||
Reference in New Issue
Block a user