Add uncached flag for file loader reads.

This allows us to indicate that a read need not be cached.
This commit is contained in:
Unknown W. Brackets
2016-06-26 23:20:05 -07:00
parent cbb1ab17ca
commit 65c7d0bd04
15 changed files with 136 additions and 117 deletions
+15 -15
View File
@@ -25,25 +25,25 @@
class CachingFileLoader : public FileLoader {
public:
CachingFileLoader(FileLoader *backend);
virtual ~CachingFileLoader() override;
~CachingFileLoader() override;
virtual bool Exists() override;
virtual bool ExistsFast() override;
virtual bool IsDirectory() override;
virtual s64 FileSize() override;
virtual std::string Path() const override;
bool Exists() override;
bool ExistsFast() override;
bool IsDirectory() override;
s64 FileSize() override;
std::string Path() const override;
virtual void Seek(s64 absolutePos) override;
virtual size_t Read(size_t bytes, size_t count, void *data) override {
return ReadAt(filepos_, bytes, count, data);
void Seek(s64 absolutePos) override;
size_t Read(size_t bytes, size_t count, void *data, Flags flags = Flags::NONE) override {
return ReadAt(filepos_, bytes, count, data, flags);
}
virtual size_t Read(size_t bytes, void *data) override {
return ReadAt(filepos_, bytes, data);
size_t Read(size_t bytes, void *data, Flags flags = Flags::NONE) override {
return ReadAt(filepos_, bytes, data, flags);
}
virtual size_t ReadAt(s64 absolutePos, size_t bytes, size_t count, void *data) override {
return ReadAt(absolutePos, bytes * count, data) / bytes;
size_t ReadAt(s64 absolutePos, size_t bytes, size_t count, void *data, Flags flags = Flags::NONE) override {
return ReadAt(absolutePos, bytes * count, data, flags) / bytes;
}
virtual size_t ReadAt(s64 absolutePos, size_t bytes, void *data) override;
size_t ReadAt(s64 absolutePos, size_t bytes, void *data, Flags flags = Flags::NONE) override;
private:
void Prepare();
@@ -51,7 +51,7 @@ private:
void ShutdownCache();
size_t ReadFromCache(s64 pos, size_t bytes, void *data);
// Guaranteed to read at least one block into the cache.
void SaveIntoCache(s64 pos, size_t bytes, bool readingAhead = false);
void SaveIntoCache(s64 pos, size_t bytes, Flags flags, bool readingAhead = false);
bool MakeCacheSpaceFor(size_t blocks, bool readingAhead);
void StartReadAhead(s64 pos);