Logo ROOT  
Reference Guide
ROOT::Internal::RRawFileDavix Class Reference

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 34 of file RRawFileDavix.hxx.

Public Member Functions

 RRawFileDavix (std::string_view url, RRawFile::ROptions options)
 
 ~RRawFileDavix ()
 
std::unique_ptr< RRawFileClone () const final
 Create a new RawFile that accesses the same resource. The file pointer is reset to zero. More...
 
int GetFeatures () const final
 Derived classes shall inform the user about the supported functionality, which can possibly depend on the file at hand. More...
 
- Public Member Functions inherited from ROOT::Internal::RRawFile
 RRawFile (const RRawFile &)=delete
 
 RRawFile (std::string_view url, ROptions options)
 
virtual ~RRawFile ()
 
virtual std::unique_ptr< RRawFileClone () const =0
 Create a new RawFile that accesses the same resource. The file pointer is reset to zero. More...
 
virtual int GetFeatures () const =0
 Derived classes shall inform the user about the supported functionality, which can possibly depend on the file at hand. More...
 
std::uint64_t GetSize ()
 Returns the size of the file. More...
 
voidMap (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. More...
 
RRawFileoperator= (const RRawFile &)=delete
 
size_t Read (void *buffer, size_t nbytes)
 Read from fFilePos offset. Returns the actual number of bytes read. More...
 
size_t ReadAt (void *buffer, size_t nbytes, std::uint64_t offset)
 Buffered read from a random position. More...
 
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. More...
 
void ReadV (RIOVec *ioVec, unsigned int nReq)
 Opens the file if necessary and calls ReadVImpl. More...
 
void Seek (std::uint64_t offset)
 Change the cursor fFilePos. More...
 
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. More...
 

Protected Member Functions

std::uint64_t GetSizeImpl () final
 Derived classes should return the file size or kUnknownFileSize. More...
 
void OpenImpl () final
 OpenImpl() is called at most once and before any call to either DoReadAt or DoGetSize. More...
 
size_t ReadAtImpl (void *buffer, size_t nbytes, std::uint64_t offset) final
 Derived classes should implement low-level reading without buffering. More...
 
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. More...
 
- Protected Member Functions inherited from ROOT::Internal::RRawFile
virtual std::uint64_t GetSizeImpl ()=0
 Derived classes should return the file size or kUnknownFileSize. More...
 
virtual voidMapImpl (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. More...
 
virtual void OpenImpl ()=0
 OpenImpl() is called at most once and before any call to either DoReadAt or DoGetSize. More...
 
virtual size_t ReadAtImpl (void *buffer, size_t nbytes, std::uint64_t offset)=0
 Derived classes should implement low-level reading without buffering. More...
 
virtual void ReadVImpl (RIOVec *ioVec, unsigned int nReq)
 By default implemented as a loop of ReadAt calls but can be overwritten, e.g. XRootD or DAVIX implementations. More...
 
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() More...
 

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< RRawFileCreate (std::string_view url, ROptions options=ROptions())
 Factory method that returns a suitable concrete implementation according to the transport in the url. More...
 
static std::string GetLocation (std::string_view url)
 Returns only the file location, e.g. "server/file" for http://server/file. More...
 
static std::string GetTransport (std::string_view url)
 Returns only the transport protocol in lower case, e.g. "http" for HTTP://server/file. More...
 
- Static Public Attributes inherited from ROOT::Internal::RRawFile
static constexpr int kFeatureHasMmap = 0x02
 Map() and Unmap() are implemented. More...
 
static constexpr int kFeatureHasSize = 0x01
 GetSize() does not return kUnknownFileSize. More...
 
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. More...
 
- 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. More...
 
ROptions fOptions
 
std::string fUrl
 

#include <ROOT/RRawFileDavix.hxx>

Inheritance diagram for ROOT::Internal::RRawFileDavix:
[legend]

Constructor & Destructor Documentation

◆ RRawFileDavix()

ROOT::Internal::RRawFileDavix::RRawFileDavix ( std::string_view  url,
RRawFile::ROptions  options 
)

Definition at line 44 of file RRawFileDavix.cxx.

◆ ~RRawFileDavix()

ROOT::Internal::RRawFileDavix::~RRawFileDavix ( )

Definition at line 49 of file RRawFileDavix.cxx.

Member Function Documentation

◆ Clone()

std::unique_ptr< ROOT::Internal::RRawFile > ROOT::Internal::RRawFileDavix::Clone ( ) const
finalvirtual

Create a new RawFile that accesses the same resource. The file pointer is reset to zero.

Implements ROOT::Internal::RRawFile.

Definition at line 55 of file RRawFileDavix.cxx.

◆ GetFeatures()

int ROOT::Internal::RRawFileDavix::GetFeatures ( ) const
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 48 of file RRawFileDavix.hxx.

◆ GetSizeImpl()

std::uint64_t ROOT::Internal::RRawFileDavix::GetSizeImpl ( )
finalprotectedvirtual

Derived classes should return the file size or kUnknownFileSize.

Implements ROOT::Internal::RRawFile.

Definition at line 60 of file RRawFileDavix.cxx.

◆ OpenImpl()

void ROOT::Internal::RRawFileDavix::OpenImpl ( )
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 70 of file RRawFileDavix.cxx.

◆ ReadAtImpl()

size_t ROOT::Internal::RRawFileDavix::ReadAtImpl ( void buffer,
size_t  nbytes,
std::uint64_t  offset 
)
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 81 of file RRawFileDavix.cxx.

◆ ReadVImpl()

void ROOT::Internal::RRawFileDavix::ReadVImpl ( RIOVec ioVec,
unsigned int  nReq 
)
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 91 of file RRawFileDavix.cxx.

Member Data Documentation

◆ fFileDes

std::unique_ptr<Internal::RDavixFileDes> ROOT::Internal::RRawFileDavix::fFileDes
private

Definition at line 36 of file RRawFileDavix.hxx.

Libraries for ROOT::Internal::RRawFileDavix:
[legend]

The documentation for this class was generated from the following files: