From 3681cade416a025ca24c35b4d176537c53b48a4f Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sat, 7 Feb 2026 23:01:05 -0600 Subject: [PATCH] DiscIO: Add IsCached virtual function to BlobReader. --- Source/Core/DiscIO/Blob.h | 3 +++ Source/Core/DiscIO/CachedBlob.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/Source/Core/DiscIO/Blob.h b/Source/Core/DiscIO/Blob.h index 841a827b97..3551c31d44 100644 --- a/Source/Core/DiscIO/Blob.h +++ b/Source/Core/DiscIO/Blob.h @@ -97,6 +97,9 @@ public: return false; } + // Returns true only for CachedBlobReader. + virtual bool IsCached() const { return false; } + protected: BlobReader() {} }; diff --git a/Source/Core/DiscIO/CachedBlob.cpp b/Source/Core/DiscIO/CachedBlob.cpp index 98ed8ba31f..f1bbf055ee 100644 --- a/Source/Core/DiscIO/CachedBlob.cpp +++ b/Source/Core/DiscIO/CachedBlob.cpp @@ -219,6 +219,8 @@ public: return m_cache_filler->Read(offset, size, out_ptr) || m_reader->Read(offset, size, out_ptr); } + bool IsCached() const override { return true; } + private: // A shared object does the cache filling for sensible CopyReader behavior. const std::shared_ptr m_cache_filler; @@ -228,11 +230,17 @@ private: std::unique_ptr CreateCachedBlobReader(std::unique_ptr reader) { + if (reader->IsCached()) // This is already CachedBlobReader. + return reader; + return std::make_unique(std::move(reader), false); } std::unique_ptr CreateScrubbingCachedBlobReader(std::unique_ptr reader) { + if (reader->IsCached()) // This reader is already a CachedBlobReader. + return reader; + return std::make_unique(std::move(reader), true); }