81 size_t CopyTo(
void *buffer,
size_t nbytes, std::uint64_t offset);
110 virtual size_t ReadAtImpl(
void *buffer,
size_t nbytes, std::uint64_t offset) = 0;
116 virtual void *
MapImpl(
size_t nbytes, std::uint64_t offset, std::uint64_t &mapdOffset);
118 virtual void UnmapImpl(
void *region,
size_t nbytes);
127 virtual std::unique_ptr<RRawFile>
Clone()
const = 0;
140 size_t ReadAt(
void *buffer,
size_t nbytes, std::uint64_t offset);
142 size_t Read(
void *buffer,
size_t nbytes);
144 void Seek(std::uint64_t offset);
151 void *
Map(
size_t nbytes, std::uint64_t offset, std::uint64_t &mapdOffset);
153 void Unmap(
void *region,
size_t nbytes);
The RRawFile provides read-only access to local and remote files.
virtual std::uint64_t GetSizeImpl()=0
Derived classes should return the file size or kUnknownFileSize.
unsigned char * fBufferSpace
Memory block containing the block buffers consecutively.
static std::string GetLocation(std::string_view url)
Returns only the file location, e.g. "server/file" for http://server/file.
unsigned int fBlockBufferIdx
To be used modulo kNumBlockBuffers, points to the last used block buffer in fBlockBuffers.
RRawFile(std::string_view url, ROptions options)
RRawFile & operator=(const RRawFile &)=delete
std::uint64_t fFilePos
The current position in the file, which can be changed by Seek, Read, and Readln.
virtual void * MapImpl(size_t nbytes, std::uint64_t offset, std::uint64_t &mapdOffset)
If a derived class supports mmap, the MapImpl and UnmapImpl calls are supposed to be implemented,...
static constexpr int kFeatureHasMmap
Map() and Unmap() are implemented.
void Unmap(void *region, size_t nbytes)
Receives a pointer returned by Map() and should have nbytes set to the full length of the mapping.
static std::string GetTransport(std::string_view url)
Returns only the transport protocol in lower case, e.g. "http" for HTTP://server/file.
static constexpr unsigned int kNumBlockBuffers
Don't change without adapting ReadAt()
std::uint64_t GetSize()
Returns the size of the file.
static std::unique_ptr< RRawFile > Create(std::string_view url, ROptions options=ROptions())
Factory method that returns a suitable concrete implementation according to the transport in the url.
void Seek(std::uint64_t offset)
Change the cursor fFilePos.
static constexpr std::uint64_t kUnknownFileSize
Derived classes do not necessarily need to provide file size information but they can return "not kno...
ELineBreaks
kAuto detects the line break from the first line, kSystem picks the system's default
size_t ReadAt(void *buffer, size_t nbytes, std::uint64_t offset)
Buffered read from a random position.
bool fIsOpen
Files are opened lazily and only when required; the open state is kept by this flag.
virtual size_t ReadAtImpl(void *buffer, size_t nbytes, std::uint64_t offset)=0
Derived classes should implement low-level reading without buffering.
bool Readln(std::string &line)
Read the next line starting from the current value of fFilePos. Returns false if the end of the file ...
RRawFile(const RRawFile &)=delete
virtual std::unique_ptr< RRawFile > Clone() const =0
Create a new RawFile that accesses the same resource. The file pointer is reset to zero.
static constexpr int kFeatureHasSize
GetSize() does not return kUnknownFileSize.
virtual void OpenImpl()=0
OpenImpl() is called at most once and before any call to either DoReadAt or DoGetSize.
size_t Read(void *buffer, size_t nbytes)
Read from fFilePos offset. Returns the actual number of bytes read.
std::uint64_t fFileSize
The cached file size.
RBlockBuffer fBlockBuffers[kNumBlockBuffers]
An active buffer and a shadow buffer, which supports "jumping back" to a previously used location in ...
virtual void UnmapImpl(void *region, size_t nbytes)
Derived classes with mmap support must be able to unmap the memory area handed out by Map()
virtual int GetFeatures() const =0
Derived classes shall inform the user about the supported functionality, which can possibly depend on...
void * Map(size_t nbytes, std::uint64_t offset, std::uint64_t &mapdOffset)
Memory mapping according to POSIX standard; in particular, new mappings of the same range replace old...
basic_string_view< char > string_view
std::uint64_t fBufferOffset
Where in the open file does fBuffer start.
RBlockBuffer(const RBlockBuffer &)=delete
unsigned char * fBuffer
Points into the I/O buffer with data from the file, not owned.
size_t CopyTo(void *buffer, size_t nbytes, std::uint64_t offset)
Tries to copy up to nbytes starting at offset from fBuffer into buffer. Returns number of bytes copie...
RBlockBuffer & operator=(const RBlockBuffer &)=delete
size_t fBufferSize
The number of currently buffered bytes in fBuffer.
On construction, an ROptions parameter can customize the RRawFile behavior.
int fBlockSize
Read at least fBlockSize bytes at a time.