OpenTTD Source  20241121-master-g67a0fccfad
RandomAccessFile Class Reference

A file from which bytes, words and double words are read in (potentially) a random order. More...

#include <random_access_file_type.h>

Inheritance diagram for RandomAccessFile:
SpriteFile

Public Member Functions

 RandomAccessFile (const std::string &filename, Subdirectory subdir)
 Create the RandomAccesFile. More...
 
 RandomAccessFile (const RandomAccessFile &)=delete
 
void operator= (const RandomAccessFile &)=delete
 
const std::string & GetFilename () const
 Get the filename of the opened file with the path from the SubDirectory and the extension. More...
 
const std::string & GetSimplifiedFilename () const
 Get the simplified filename of the opened file. More...
 
size_t GetPos () const
 Get position in the file. More...
 
size_t GetStartPos () const
 
size_t GetEndPos () const
 
void SeekTo (size_t pos, int mode)
 Seek in the current file. More...
 
bool AtEndOfFile () const
 Test if we have reached the end of the file. More...
 
uint8_t ReadByte ()
 Read a byte from the file. More...
 
uint16_t ReadWord ()
 Read a word (16 bits) from the file (in low endian format). More...
 
uint32_t ReadDword ()
 Read a double word (32 bits) from the file (in low endian format). More...
 
void ReadBlock (void *ptr, size_t size)
 Read a block. More...
 
void SkipBytes (size_t n)
 Skip n bytes ahead in the file. More...
 

Private Attributes

std::string filename
 Full name of the file; relative path to subdir plus the extension of the file.
 
std::string simplified_filename
 Simplified lowecase name of the file; only the name, no path or extension.
 
std::optional< FileHandlefile_handle
 File handle of the open file.
 
size_t pos
 Position in the file of the end of the read buffer.
 
size_t start_pos
 Start position of file. May be non-zero if file is within a tar file.
 
size_t end_pos
 End position of file.
 
uint8_t * buffer
 Current position within the local buffer.
 
uint8_t * buffer_end
 Last valid byte of buffer.
 
uint8_t buffer_start [BUFFER_SIZE]
 Local buffer when read from file.
 

Static Private Attributes

static constexpr int BUFFER_SIZE = 512
 The number of bytes to allocate for the buffer.
 

Detailed Description

A file from which bytes, words and double words are read in (potentially) a random order.

This is mostly intended to be used for things that can be read from GRFs when needed, so the graphics but also the sounds. This also ties into the spritecache as it uses these files to load the sprites from when needed.

Definition at line 22 of file random_access_file_type.h.

Constructor & Destructor Documentation

◆ RandomAccessFile()

RandomAccessFile::RandomAccessFile ( const std::string &  filename,
Subdirectory  subdir 
)

Create the RandomAccesFile.

Parameters
filenameName of the file at the disk.
subdirThe sub directory to search this file in.

Definition at line 25 of file random_access_file.cpp.

References file_handle, and FioFOpenFile().

Member Function Documentation

◆ AtEndOfFile()

bool RandomAccessFile::AtEndOfFile ( ) const

Test if we have reached the end of the file.

Returns
True iff the current position as at or after the end of the file.

Definition at line 80 of file random_access_file.cpp.

References GetPos().

◆ GetFilename()

const std::string & RandomAccessFile::GetFilename ( ) const

Get the filename of the opened file with the path from the SubDirectory and the extension.

Returns
Name of the file.

Definition at line 52 of file random_access_file.cpp.

References filename.

◆ GetPos()

size_t RandomAccessFile::GetPos ( ) const

Get position in the file.

Returns
Position in the file.

Definition at line 71 of file random_access_file.cpp.

References buffer, buffer_end, and pos.

Referenced by AtEndOfFile(), GetGRFContainerVersion(), LoadNewGRFSound(), LoadNextSprite(), ReadBlock(), ReadGRFSpriteOffsets(), SeekTo(), and SpriteFile::SpriteFile().

◆ GetSimplifiedFilename()

const std::string & RandomAccessFile::GetSimplifiedFilename ( ) const

Get the simplified filename of the opened file.

The simplified filename is the name of the file without the SubDirectory or extension in lower case.

Returns
Name of the file.

Definition at line 62 of file random_access_file.cpp.

References simplified_filename.

Referenced by LoadNewGRFSound(), and WarnCorruptSprite().

◆ ReadBlock()

void RandomAccessFile::ReadBlock ( void *  ptr,
size_t  size 
)

Read a block.

Parameters
ptrDestination buffer.
sizeNumber of bytes to read.

Definition at line 145 of file random_access_file.cpp.

References file_handle, GetPos(), pos, and SeekTo().

Referenced by GetMusicCatEntryData(), GetMusicCatEntryName(), LoadNewGRFSound(), and ReadRecolourSprite().

◆ ReadByte()

uint8_t RandomAccessFile::ReadByte ( )

◆ ReadDword()

uint32_t RandomAccessFile::ReadDword ( )

Read a double word (32 bits) from the file (in low endian format).

Returns
Read word.

Definition at line 134 of file random_access_file.cpp.

References ReadWord().

Referenced by GetMusicCatEntryData(), GetMusicCatEntryName(), LoadNewGRFSound(), LoadNextSprite(), and ReadGRFSpriteOffsets().

◆ ReadWord()

uint16_t RandomAccessFile::ReadWord ( )

Read a word (16 bits) from the file (in low endian format).

Returns
Read word.

Definition at line 124 of file random_access_file.cpp.

Referenced by GetGRFContainerVersion(), LoadNewGRFSound(), LoadNextSprite(), and ReadDword().

◆ SeekTo()

void RandomAccessFile::SeekTo ( size_t  pos,
int  mode 
)

Seek in the current file.

Parameters
posNew position.
modeType of seek (SEEK_CUR means pos is relative to current position, SEEK_SET means pos is absolute).

Definition at line 90 of file random_access_file.cpp.

References buffer, buffer_end, buffer_start, Debug, file_handle, filename, GetPos(), and pos.

Referenced by GetGRFContainerVersion(), GetMusicCatEntryData(), GetMusicCatEntryName(), LoadNewGRFSound(), ReadBlock(), ReadGRFSpriteOffsets(), SpriteFile::SeekToBegin(), and SkipBytes().

◆ SkipBytes()

void RandomAccessFile::SkipBytes ( size_t  n)

Skip n bytes ahead in the file.

Parameters
nNumber of bytes to skip reading.

Definition at line 155 of file random_access_file.cpp.

References buffer, buffer_end, and SeekTo().

Referenced by GetMusicCatEntryData(), LoadNewGRFSound(), LoadNextSprite(), and ReadGRFSpriteOffsets().


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