Bitcoin Core 31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
BufferedFile Class Reference

Wrapper around an AutoFile& that implements a ring buffer to deserialize from. More...

#include <streams.h>

Collaboration diagram for BufferedFile:
[legend]

Public Member Functions

 BufferedFile (AutoFile &file LIFETIMEBOUND, uint64_t nBufSize, uint64_t nRewindIn)
bool eof () const
 check whether we're at the end of the source file
void read (std::span< std::byte > dst)
 read a number of bytes
void SkipTo (const uint64_t file_pos)
uint64_t GetPos () const
 return the current reading position
bool SetPos (uint64_t nPos)
 rewind to a given reading position
bool SetLimit (uint64_t nPos=std::numeric_limits< uint64_t >::max())
template<typename T>
BufferedFileoperator>> (T &&obj)
void FindByte (std::byte byte)
 search for a given byte in the stream, and remain positioned on it

Private Member Functions

bool Fill ()
 read data from the source to fill the buffer
std::pair< std::byte *, size_t > AdvanceStream (size_t length)

Private Attributes

AutoFilem_src
uint64_t nSrcPos {0}
 how many bytes have been read from source
uint64_t m_read_pos {0}
 how many bytes have been read from this
uint64_t nReadLimit
 up to which position we're allowed to read
uint64_t nRewind
 how many bytes we guarantee to rewind
DataBuffer vchBuf

Detailed Description

Wrapper around an AutoFile& that implements a ring buffer to deserialize from.

It guarantees the ability to rewind a given number of bytes.

Will automatically close the file when it goes out of scope if not null. If you need to close the file early, use file.fclose() instead of fclose(file).

Definition at line 482 of file streams.h.

Constructor & Destructor Documentation

◆ BufferedFile()

BufferedFile::BufferedFile ( AutoFile &file LIFETIMEBOUND,
uint64_t nBufSize,
uint64_t nRewindIn )
inline

Definition at line 532 of file streams.h.

Here is the caller graph for this function:

Member Function Documentation

◆ AdvanceStream()

std::pair< std::byte *, size_t > BufferedFile::AdvanceStream ( size_t length)
inlineprivate

Advance the stream's read pointer (m_read_pos) by up to 'length' bytes, filling the buffer from the file so that at least one byte is available. Return a pointer to the available buffer data and the number of bytes (which may be less than the requested length) that may be accessed beginning at that pointer.

Definition at line 514 of file streams.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ eof()

bool BufferedFile::eof ( ) const
inline

check whether we're at the end of the source file

Definition at line 540 of file streams.h.

Here is the caller graph for this function:

◆ Fill()

bool BufferedFile::Fill ( )
inlineprivate

read data from the source to fill the buffer

Definition at line 493 of file streams.h.

Here is the caller graph for this function:

◆ FindByte()

void BufferedFile::FindByte ( std::byte byte)
inline

search for a given byte in the stream, and remain positioned on it

Definition at line 600 of file streams.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetPos()

uint64_t BufferedFile::GetPos ( ) const
inline

return the current reading position

Definition at line 563 of file streams.h.

Here is the caller graph for this function:

◆ operator>>()

template<typename T>
BufferedFile & BufferedFile::operator>> ( T && obj)
inline

Definition at line 594 of file streams.h.

Here is the call graph for this function:

◆ read()

void BufferedFile::read ( std::span< std::byte > dst)
inline

read a number of bytes

Definition at line 545 of file streams.h.

Here is the call graph for this function:

◆ SetLimit()

bool BufferedFile::SetLimit ( uint64_t nPos = std::numeric_limits<uint64_t>::max())
inline

prevent reading beyond a certain position no argument removes the limit

Definition at line 586 of file streams.h.

Here is the caller graph for this function:

◆ SetPos()

bool BufferedFile::SetPos ( uint64_t nPos)
inline

rewind to a given reading position

Definition at line 568 of file streams.h.

Here is the caller graph for this function:

◆ SkipTo()

void BufferedFile::SkipTo ( const uint64_t file_pos)
inline

Move the read position ahead in the stream to the given position. Use SetPos() to back up in the stream, not SkipTo().

Definition at line 556 of file streams.h.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_read_pos

uint64_t BufferedFile::m_read_pos {0}
private

how many bytes have been read from this

Definition at line 487 of file streams.h.

◆ m_src

AutoFile& BufferedFile::m_src
private

Definition at line 485 of file streams.h.

◆ nReadLimit

uint64_t BufferedFile::nReadLimit
private

up to which position we're allowed to read

Definition at line 488 of file streams.h.

◆ nRewind

uint64_t BufferedFile::nRewind
private

how many bytes we guarantee to rewind

Definition at line 489 of file streams.h.

◆ nSrcPos

uint64_t BufferedFile::nSrcPos {0}
private

how many bytes have been read from source

Definition at line 486 of file streams.h.

◆ vchBuf

DataBuffer BufferedFile::vchBuf
private

Definition at line 490 of file streams.h.


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