OpenTTD Source 20241224-master-gee860a5c8e
ByteBuffer Class Reference

Owning byte buffer readable as a stream. More...

Public Member Functions

 ByteBuffer (FileHandle &file, size_t len)
 Construct buffer from data in a file.
 
bool IsValid () const
 Return whether the buffer was constructed successfully.
 
bool IsEnd () const
 Return whether reading has reached the end of the buffer.
 
bool ReadByte (uint8_t &b)
 Read a single byte from the buffer.
 
bool ReadVariableLength (uint32_t &res)
 Read a MIDI file variable length value.
 
bool ReadBuffer (uint8_t *dest, size_t length)
 Read bytes into a buffer.
 
bool ReadDataBlock (MidiFile::DataBlock *dest, size_t length)
 Read bytes into a MidiFile::DataBlock.
 
bool Skip (size_t count)
 Skip over a number of bytes in the buffer.
 
bool Rewind (size_t count)
 Go a number of bytes back to re-read.
 

Private Attributes

std::vector< uint8_t > buf
 
size_t pos
 

Detailed Description

Owning byte buffer readable as a stream.

RAII-compliant to make teardown in error situations easier.

Definition at line 62 of file midifile.cpp.

Constructor & Destructor Documentation

◆ ByteBuffer()

ByteBuffer::ByteBuffer ( FileHandle file,
size_t  len 
)
inline

Construct buffer from data in a file.

If file does not have sufficient bytes available, the object is constructed in an error state, that causes all further function calls to fail.

Parameters
filefile to read from at current position
lennumber of bytes to read

Definition at line 73 of file midifile.cpp.

Member Function Documentation

◆ IsEnd()

bool ByteBuffer::IsEnd ( ) const
inline

Return whether reading has reached the end of the buffer.

Returns
true if there are no more bytes available to read

Definition at line 97 of file midifile.cpp.

Referenced by ReadBuffer(), ReadByte(), ReadDataBlock(), ReadVariableLength(), and Skip().

◆ IsValid()

bool ByteBuffer::IsValid ( ) const
inline

Return whether the buffer was constructed successfully.

Returns
true is the buffer contains data

Definition at line 88 of file midifile.cpp.

◆ ReadBuffer()

bool ByteBuffer::ReadBuffer ( uint8_t *  dest,
size_t  length 
)
inline

Read bytes into a buffer.

Parameters
[out]destbuffer to copy into
lengthnumber of bytes to read
Returns
true if the requested number of bytes were available

Definition at line 139 of file midifile.cpp.

References IsEnd().

◆ ReadByte()

bool ByteBuffer::ReadByte ( uint8_t &  b)
inline

Read a single byte from the buffer.

Parameters
[out]breturns the read value
Returns
true if a byte was available for reading

Definition at line 107 of file midifile.cpp.

References IsEnd().

◆ ReadDataBlock()

bool ByteBuffer::ReadDataBlock ( MidiFile::DataBlock dest,
size_t  length 
)
inline

Read bytes into a MidiFile::DataBlock.

Parameters
[out]destDataBlock to copy into
lengthnumber of bytes to read
Returns
true if the requested number of bytes were available

Definition at line 154 of file midifile.cpp.

References MidiFile::DataBlock::data, and IsEnd().

◆ ReadVariableLength()

bool ByteBuffer::ReadVariableLength ( uint32_t &  res)
inline

Read a MIDI file variable length value.

Each byte encodes 7 bits of the value, most-significant bits are encoded first. If the most significant bit in a byte is set, there are further bytes encoding the value.

Parameters
[out]resreturns the read value
Returns
true if there was data available

Definition at line 121 of file midifile.cpp.

References IsEnd().

◆ Rewind()

bool ByteBuffer::Rewind ( size_t  count)
inline

Go a number of bytes back to re-read.

Parameters
countnumber of bytes to go back
Returns
true if at least count bytes had been read previously

Definition at line 181 of file midifile.cpp.

◆ Skip()

bool ByteBuffer::Skip ( size_t  count)
inline

Skip over a number of bytes in the buffer.

Parameters
countnumber of bytes to skip over
Returns
true if there were enough bytes available

Definition at line 168 of file midifile.cpp.

References IsEnd().

Field Documentation

◆ buf

std::vector<uint8_t> ByteBuffer::buf
private

Definition at line 63 of file midifile.cpp.

◆ pos

size_t ByteBuffer::pos
private

Definition at line 64 of file midifile.cpp.


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