Merge pull request #12387 from lioncash/cache

GameFileCache: Pass std::function by reference rather than by value
This commit is contained in:
Admiral H. Curtiss 2023-12-11 21:46:59 +01:00 committed by GitHub
commit dd0ac7d53c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 16 deletions

View File

@ -43,7 +43,7 @@ GameFileCache::GameFileCache() : m_path(File::GetUserPath(D_CACHE_IDX) + "gameli
{
}
void GameFileCache::ForEach(std::function<void(const std::shared_ptr<const GameFile>&)> f) const
void GameFileCache::ForEach(const ForEachFn& f) const
{
for (const std::shared_ptr<GameFile>& item : m_cached_files)
f(item);
@ -83,11 +83,10 @@ std::shared_ptr<const GameFile> GameFileCache::AddOrGet(const std::string& path,
return result;
}
bool GameFileCache::Update(
const std::vector<std::string>& all_game_paths,
std::function<void(const std::shared_ptr<const GameFile>&)> game_added_to_cache,
std::function<void(const std::string&)> game_removed_from_cache,
const std::atomic_bool& processing_halted)
bool GameFileCache::Update(std::span<const std::string> all_game_paths,
const GameAddedToCacheFn& game_added_to_cache,
const GameRemovedFromCacheFn& game_removed_from_cache,
const std::atomic_bool& processing_halted)
{
// Copy game paths into a set, except ones that match DiscIO::ShouldHideFromGameList.
// TODO: Prevent DoFileSearch from looking inside /files/ directories of DirectoryBlobs at all?
@ -151,9 +150,8 @@ bool GameFileCache::Update(
return cache_changed;
}
bool GameFileCache::UpdateAdditionalMetadata(
std::function<void(const std::shared_ptr<const GameFile>&)> game_updated,
const std::atomic_bool& processing_halted)
bool GameFileCache::UpdateAdditionalMetadata(const GameUpdatedFn& game_updated,
const std::atomic_bool& processing_halted)
{
bool cache_changed = false;

View File

@ -7,6 +7,7 @@
#include <cstddef>
#include <functional>
#include <memory>
#include <span>
#include <string>
#include <vector>
@ -30,9 +31,14 @@ public:
Yes = 1,
};
using ForEachFn = std::function<void(const std::shared_ptr<const GameFile>&)>;
using GameAddedToCacheFn = std::function<void(const std::shared_ptr<const GameFile>&)>;
using GameRemovedFromCacheFn = std::function<void(const std::string&)>;
using GameUpdatedFn = std::function<void(const std::shared_ptr<const GameFile>&)>;
GameFileCache();
void ForEach(std::function<void(const std::shared_ptr<const GameFile>&)> f) const;
void ForEach(const ForEachFn& f) const;
size_t GetSize() const;
void Clear(DeleteOnDisk delete_on_disk);
@ -41,13 +47,12 @@ public:
std::shared_ptr<const GameFile> AddOrGet(const std::string& path, bool* cache_changed);
// These functions return true if the call modified the cache.
bool Update(const std::vector<std::string>& all_game_paths,
std::function<void(const std::shared_ptr<const GameFile>&)> game_added_to_cache = {},
std::function<void(const std::string&)> game_removed_from_cache = {},
bool Update(std::span<const std::string> all_game_paths,
const GameAddedToCacheFn& game_added_to_cache = {},
const GameRemovedFromCacheFn& game_removed_from_cache = {},
const std::atomic_bool& processing_halted = false);
bool UpdateAdditionalMetadata(
std::function<void(const std::shared_ptr<const GameFile>&)> game_updated = {},
const std::atomic_bool& processing_halted = false);
bool UpdateAdditionalMetadata(const GameUpdatedFn& game_updated = {},
const std::atomic_bool& processing_halted = false);
bool Load();
bool Save();