DiscIO: Add IsCached virtual function to BlobReader.
This commit is contained in:
1 parent
aaa7094442
commit
3681cade41
2 files changed
+11
No files matched your search
@@ -97,6 +97,9 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns true only for CachedBlobReader.
|
||||||
|
virtual bool IsCached() const { return false; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BlobReader() {}
|
BlobReader() {}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -219,6 +219,8 @@ public:
|
|||||||
return m_cache_filler->Read(offset, size, out_ptr) || m_reader->Read(offset, size, out_ptr);
|
return m_cache_filler->Read(offset, size, out_ptr) || m_reader->Read(offset, size, out_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsCached() const override { return true; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// A shared object does the cache filling for sensible CopyReader behavior.
|
// A shared object does the cache filling for sensible CopyReader behavior.
|
||||||
const std::shared_ptr<CacheFiller> m_cache_filler;
|
const std::shared_ptr<CacheFiller> m_cache_filler;
|
||||||
@@ -228,11 +230,17 @@ private:
|
|||||||
|
|
||||||
std::unique_ptr<BlobReader> CreateCachedBlobReader(std::unique_ptr<BlobReader> reader)
|
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);
|
return std::make_unique<CachedBlobReader>(std::move(reader), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<BlobReader> CreateScrubbingCachedBlobReader(std::unique_ptr<BlobReader> reader)
|
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);
|
return std::make_unique<CachedBlobReader>(std::move(reader), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user