The RRawFileDavix class provides read-only access to remote non-ROOT files.
It uses the Davix library for the transport layer. It instructs the RRawFile base class to buffer in larger chunks than the default for local files, assuming that remote file access has high(er) latency.
Definition at line 35 of file RRawFileDavix.hxx.
Public Member Functions | |
RRawFileDavix (std::string_view url, RRawFile::ROptions options) | |
~RRawFileDavix () | |
std::unique_ptr< RRawFile > | Clone () const final |
Create a new RawFile that accesses the same resource. The file pointer is reset to zero. | |
int | GetFeatures () const final |
Derived classes shall inform the user about the supported functionality, which can possibly depend on the file at hand. | |
Public Member Functions inherited from ROOT::Internal::RRawFile | |
RRawFile (const RRawFile &)=delete | |
RRawFile (std::string_view url, ROptions options) | |
virtual | ~RRawFile () |
std::uint64_t | GetFilePos () const |
Returns the offset for the next Read/Readln call. | |
virtual RIOVecLimits | GetReadVLimits () |
Returns the limits regarding the ioVec input to ReadV for this specific file; may open the file as a side-effect. | |
std::uint64_t | GetSize () |
Returns the size of the file. | |
std::string | GetUrl () const |
Returns the url of the file. | |
bool | IsOpen () const |
Once opened, the file stay open until destruction of the RRawFile object. | |
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 older ones. | |
RRawFile & | operator= (const RRawFile &)=delete |
size_t | Read (void *buffer, size_t nbytes) |
Read from fFilePos offset. Returns the actual number of bytes read. | |
size_t | ReadAt (void *buffer, size_t nbytes, std::uint64_t offset) |
Buffered read from a random position. | |
bool | Readln (std::string &line) |
Read the next line starting from the current value of fFilePos. Returns false if the end of the file is reached. | |
void | ReadV (RIOVec *ioVec, unsigned int nReq) |
Opens the file if necessary and calls ReadVImpl. | |
void | Seek (std::uint64_t offset) |
Change the cursor fFilePos. | |
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. | |
Protected Member Functions | |
std::uint64_t | GetSizeImpl () final |
Derived classes should return the file size or kUnknownFileSize. | |
void | OpenImpl () final |
OpenImpl() is called at most once and before any call to either DoReadAt or DoGetSize. | |
size_t | ReadAtImpl (void *buffer, size_t nbytes, std::uint64_t offset) final |
Derived classes should implement low-level reading without buffering. | |
void | ReadVImpl (RIOVec *ioVec, unsigned int nReq) final |
By default implemented as a loop of ReadAt calls but can be overwritten, e.g. XRootD or DAVIX implementations. | |
Protected Member Functions inherited from ROOT::Internal::RRawFile | |
void | EnsureOpen () |
Open the file if not already open. Otherwise noop. | |
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, too The default implementation throws an error. | |
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() | |
Private Attributes | |
std::unique_ptr< Internal::RDavixFileDes > | fFileDes |
Additional Inherited Members | |
Public Types inherited from ROOT::Internal::RRawFile | |
enum class | ELineBreaks { kAuto , kSystem , kUnix , kWindows } |
kAuto detects the line break from the first line, kSystem picks the system's default More... | |
Static Public Member Functions inherited from ROOT::Internal::RRawFile | |
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. | |
static std::string | GetLocation (std::string_view url) |
Returns only the file location, e.g. "server/file" for http://server/file. | |
static std::string | GetTransport (std::string_view url) |
Returns only the transport protocol in lower case, e.g. "http" for HTTP://server/file. | |
Static Public Attributes inherited from ROOT::Internal::RRawFile | |
static constexpr int | kFeatureHasAsyncIo = 0x04 |
File supports async IO. | |
static constexpr int | kFeatureHasMmap = 0x02 |
Map() and Unmap() are implemented. | |
static constexpr int | kFeatureHasSize = 0x01 |
GetSize() does not return kUnknownFileSize. | |
static constexpr std::uint64_t | kUnknownFileSize = std::uint64_t(-1) |
Derived classes do not necessarily need to provide file size information but they can return "not known" instead. | |
Protected Attributes inherited from ROOT::Internal::RRawFile | |
std::uint64_t | fFilePos |
The current position in the file, which can be changed by Seek, Read, and Readln. | |
ROptions | fOptions |
std::string | fUrl |
#include <ROOT/RRawFileDavix.hxx>
ROOT::Internal::RRawFileDavix::RRawFileDavix | ( | std::string_view | url, |
RRawFile::ROptions | options | ||
) |
Definition at line 45 of file RRawFileDavix.cxx.
ROOT::Internal::RRawFileDavix::~RRawFileDavix | ( | ) |
Definition at line 50 of file RRawFileDavix.cxx.
|
finalvirtual |
Create a new RawFile that accesses the same resource. The file pointer is reset to zero.
Implements ROOT::Internal::RRawFile.
Definition at line 56 of file RRawFileDavix.cxx.
|
inlinefinalvirtual |
Derived classes shall inform the user about the supported functionality, which can possibly depend on the file at hand.
Implements ROOT::Internal::RRawFile.
Definition at line 49 of file RRawFileDavix.hxx.
|
finalprotectedvirtual |
Derived classes should return the file size or kUnknownFileSize.
Implements ROOT::Internal::RRawFile.
Definition at line 61 of file RRawFileDavix.cxx.
|
finalprotectedvirtual |
OpenImpl() is called at most once and before any call to either DoReadAt or DoGetSize.
If fOptions.fBlocksize is negative, derived classes are responsible to set a sensible value. After a call to OpenImpl(), fOptions.fBlocksize must be larger or equal to zero.
Implements ROOT::Internal::RRawFile.
Definition at line 71 of file RRawFileDavix.cxx.
|
finalprotectedvirtual |
Derived classes should implement low-level reading without buffering.
Short reads indicate the end of the file, therefore derived classes should return nbytes bytes if available.
Implements ROOT::Internal::RRawFile.
Definition at line 82 of file RRawFileDavix.cxx.
|
finalprotectedvirtual |
By default implemented as a loop of ReadAt calls but can be overwritten, e.g. XRootD or DAVIX implementations.
Reimplemented from ROOT::Internal::RRawFile.
Definition at line 92 of file RRawFileDavix.cxx.
|
private |
Definition at line 37 of file RRawFileDavix.hxx.