summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2026-02-07 23:01:05 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2026-02-15 20:14:15 -0600
commit3681cade416a025ca24c35b4d176537c53b48a4f (patch)
treeb2c8698cf21842ae199ac9b5ad7e8dc7f00e2e8f /Source/Core/DiscIO
parentaaa709444245ada15b5679e60a02fdfde2e4510c (diff)
DiscIO: Add IsCached virtual function to BlobReader.
Diffstat (limited to 'Source/Core/DiscIO')
-rw-r--r--Source/Core/DiscIO/Blob.h3
-rw-r--r--Source/Core/DiscIO/CachedBlob.cpp8
2 files changed, 11 insertions, 0 deletions
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<CacheFiller> m_cache_filler;
@@ -228,11 +230,17 @@ private:
std::unique_ptr<BlobReader> CreateCachedBlobReader(std::unique_ptr<BlobReader> reader)
{
+ if (reader->IsCached()) // This is already CachedBlobReader.
+ return reader;
+
return std::make_unique<CachedBlobReader>(std::move(reader), false);
}
std::unique_ptr<BlobReader> CreateScrubbingCachedBlobReader(std::unique_ptr<BlobReader> reader)
{
+ if (reader->IsCached()) // This reader is already a CachedBlobReader.
+ return reader;
+
return std::make_unique<CachedBlobReader>(std::move(reader), true);
}