25#include <vrs/ErrorCode.h>
26#include <vrs/FileDelegator.h>
27#include <vrs/FileSpec.h>
28#include <vrs/VrsExport.h>
29#include <vrs/helpers/EnumTemplates.hpp>
30#include <vrs/os/CompilerAttributes.h>
103 size_t blockReadCount;
104 size_t blockMissingCount;
105 size_t blockPendingCount;
109 using CacheStatsCallbackFunction = std::function<void(
const CacheStats& stats)>;
114 static unique_ptr<FileHandler> makeOpen(
const string& filePath);
115 static unique_ptr<FileHandler> makeOpen(
const FileSpec& fileSpec);
120 virtual unique_ptr<FileHandler>
makeNew()
const = 0;
121 virtual const string& getFileHandlerName()
const = 0;
122 virtual const string& getWriteFileHandlerName()
const;
127 virtual int open(
const string& filePath);
143 int delegateOpen(
const FileSpec& fileSpec, unique_ptr<FileHandler>& outNewDelegate)
override;
168 return !isRemoteFileSystem();
178 virtual int read(
void* buffer,
size_t length) = 0;
180 template <typename T, std::enable_if_t<std::is_trivially_copyable<T>::value,
int> = 0>
182 return read(&
object,
sizeof(
object));
185 template <typename T, std::enable_if_t<std::is_trivially_copyable<T>::value,
int> = 0>
187 return read(vec.data(), vec.size() *
sizeof(T));
195 virtual bool isReadOnly()
const;
219 virtual int getChunkRange(int64_t& outChunkOffset, int64_t& outChunkSize)
const = 0;
231 return CachingStrategy::Passive;
246 MAYBE_UNUSED
const vector<std::pair<size_t, size_t>>& sequence,
247 MAYBE_UNUSED
bool clearSequence =
true) {
251 virtual bool setStatsCallback(
const CacheStatsCallbackFunction& ) {
262 bool isFileHandlerMatch(
const FileSpec& fileSpec)
const;
270 return isRemoteFileSystem();
279 originalPtr_{handler_.get()},
280 originalStrategy_{handler->getCachingStrategy()} {
281 handler_->setCachingStrategy(temporaryStrategy);
285 if (originalPtr_ == handler_.get()) {
286 originalPtr_->setCachingStrategy(originalStrategy_);
291 unique_ptr<FileHandler>& handler_;
Class to abstract the delegate file open operation for VRS file.
Definition FileDelegator.h:32
Class to abstract VRS file system operations, to enable support for alternate storage methods,...
Definition FileHandler.h:97
virtual bool isAvailableOrPrefetch(MAYBE_UNUSED size_t length)
Definition FileHandler.h:167
virtual int read(void *buffer, size_t length)=0
virtual int64_t getPos() const =0
virtual int64_t getTotalSize() const =0
virtual int skipForward(int64_t offset)=0
virtual vector< std::pair< string, int64_t > > getFileChunks() const =0
virtual bool isRemoteFileSystem() const =0
virtual bool prefetchReadSequence(MAYBE_UNUSED const vector< std::pair< size_t, size_t > > &sequence, MAYBE_UNUSED bool clearSequence=true)
Definition FileHandler.h:245
int read(T &object)
Helper to read trivially copyable objects, in a chunk aware way.
Definition FileHandler.h:181
virtual bool isEof() const =0
virtual bool showProgress() const
Tell if the file handler is probably slow, and extra progress information might be useful.
Definition FileHandler.h:269
virtual unique_ptr< FileHandler > makeNew() const =0
virtual bool isOpened() const =0
virtual CachingStrategy getCachingStrategy() const
Definition FileHandler.h:230
int read(vector< T > &vec)
Helper to read a vector of trivially copyable objects, in a chunk aware way.
Definition FileHandler.h:186
virtual int setPos(int64_t offset)=0
virtual int64_t getChunkPos() const =0
virtual int openSpec(const FileSpec &fileSpec)=0
virtual void forgetFurtherChunks(int64_t maxSize)=0
Call this method to forget any chunk beyond this file size.
virtual size_t getLastRWSize() const =0
virtual int getChunkRange(int64_t &outChunkOffset, int64_t &outChunkSize) const =0
virtual bool purgeCache()
Definition FileHandler.h:258
virtual bool setCachingStrategy(CachingStrategy)
Definition FileHandler.h:225
virtual int getLastError() const =0
Helper class to temporarily modify a FileHandler's caching strategy.
Definition FileHandler.h:275
Definition Compressor.cpp:113
@ Undefined
when not set explicitly
constexpr const char * kPrefetchCache
To enable basic caching for network file handlers.
Definition FileHandler.h:74
CachingStrategy
Definition FileHandler.h:47
Stats for cache.
Definition FileHandler.h:100
Generalized file descriptor class, allowing the efficient representation of complex file objects,...
Definition FileSpec.h:42