Pyrogenesis HEAD
Pyrogenesis, a RTS Engine
VFS Class Reference
Inheritance diagram for VFS:
Collaboration diagram for VFS:

Public Member Functions

 VFS ()
 
virtual Status Mount (const VfsPath &mountPoint, const OsPath &path, size_t flags, size_t priority)
 mount a directory into the VFS. More...
 
virtual Status GetFileInfo (const VfsPath &pathname, CFileInfo *pfileInfo) const
 Retrieve information about a file (similar to POSIX stat). More...
 
virtual Status GetFilePriority (const VfsPath &pathname, size_t *ppriority) const
 Retrieve mount priority for a file. More...
 
virtual Status GetDirectoryEntries (const VfsPath &path, CFileInfos *fileInfos, DirectoryNames *subdirectoryNames) const
 Retrieve lists of all files and subdirectories in a directory. More...
 
virtual Status CreateFile (const VfsPath &pathname, const std::shared_ptr< u8 > &fileContents, size_t size)
 Create a file with the given contents. More...
 
virtual Status LoadFile (const VfsPath &pathname, std::shared_ptr< u8 > &fileContents, size_t &size)
 Read an entire file into memory. More...
 
virtual std::wstring TextRepresentation () const
 
virtual Status GetOriginalPath (const VfsPath &pathname, OsPath &realPathname)
 Retrieve the POSIX pathname a VFS file was loaded from. More...
 
virtual Status GetRealPath (const VfsPath &pathname, OsPath &realPathname, bool createMissingDirectories)
 Retrieve the real (POSIX) pathname underlying a VFS file. More...
 
virtual Status GetDirectoryRealPath (const VfsPath &pathname, OsPath &realPathname, bool createMissingDirectories)
 Retrieve the real (POSIX) pathname underlying a VFS directory. More...
 
virtual Status GetVirtualPath (const OsPath &realPathname, VfsPath &pathname)
 retrieve the VFS pathname that corresponds to a real file. More...
 
virtual Status RemoveFile (const VfsPath &pathname)
 remove file from the virtual directory listing. More...
 
virtual Status RepopulateDirectory (const VfsPath &path)
 request the directory be re-populated when it is next accessed. More...
 
virtual void Clear ()
 empty the contents of the filesystem. More...
 
- Public Member Functions inherited from IVFS
virtual ~IVFS ()
 
virtual Status Mount (const VfsPath &mountPoint, const OsPath &path, size_t flags=0, size_t priority=0)=0
 mount a directory into the VFS. More...
 
virtual Status GetFileInfo (const VfsPath &pathname, CFileInfo *pfileInfo) const =0
 Retrieve information about a file (similar to POSIX stat). More...
 
virtual Status GetFilePriority (const VfsPath &pathname, size_t *ppriority) const =0
 Retrieve mount priority for a file. More...
 
virtual Status GetDirectoryEntries (const VfsPath &path, CFileInfos *fileInfos, DirectoryNames *subdirectoryNames) const =0
 Retrieve lists of all files and subdirectories in a directory. More...
 
virtual Status CreateFile (const VfsPath &pathname, const std::shared_ptr< u8 > &fileContents, size_t size)=0
 Create a file with the given contents. More...
 
virtual Status LoadFile (const VfsPath &pathname, std::shared_ptr< u8 > &fileContents, size_t &size)=0
 Read an entire file into memory. More...
 
virtual std::wstring TextRepresentation () const =0
 
virtual Status GetOriginalPath (const VfsPath &filename, OsPath &loadedPathname)=0
 Retrieve the POSIX pathname a VFS file was loaded from. More...
 
virtual Status GetRealPath (const VfsPath &pathname, OsPath &realPathname, bool createMissingDirectories=true)=0
 Retrieve the real (POSIX) pathname underlying a VFS file. More...
 
virtual Status GetDirectoryRealPath (const VfsPath &pathname, OsPath &realPathname, bool createMissingDirectories=true)=0
 Retrieve the real (POSIX) pathname underlying a VFS directory. More...
 
virtual Status GetVirtualPath (const OsPath &realPathname, VfsPath &pathname)=0
 retrieve the VFS pathname that corresponds to a real file. More...
 
virtual Status RemoveFile (const VfsPath &pathname)=0
 remove file from the virtual directory listing. More...
 
virtual Status RepopulateDirectory (const VfsPath &path)=0
 request the directory be re-populated when it is next accessed. More...
 
virtual void Clear ()=0
 empty the contents of the filesystem. More...
 

Private Member Functions

Status FindRealPathR (const OsPath &realPath, const VfsDirectory &directory, const VfsPath &curPath, VfsPath &path)
 

Private Attributes

PITrace m_trace
 
VfsDirectory m_rootDirectory
 

Constructor & Destructor Documentation

◆ VFS()

VFS::VFS ( )
inline

Member Function Documentation

◆ Clear()

virtual void VFS::Clear ( )
inlinevirtual

empty the contents of the filesystem.

this is typically only necessary when changing the set of mounted directories, e.g. when switching mods. NB: open files are not affected.

Implements IVFS.

◆ CreateFile()

virtual Status VFS::CreateFile ( const VfsPath pathname,
const std::shared_ptr< u8 > &  fileContents,
size_t  size 
)
inlinevirtual

Create a file with the given contents.

Parameters
pathname
fileContents
size[bytes] of the contents, will match that of the file.
Returns
Status.

Implements IVFS.

◆ FindRealPathR()

Status VFS::FindRealPathR ( const OsPath realPath,
const VfsDirectory directory,
const VfsPath curPath,
VfsPath path 
)
inlineprivate

◆ GetDirectoryEntries()

virtual Status VFS::GetDirectoryEntries ( const VfsPath path,
CFileInfos fileInfos,
DirectoryNames subdirectoryNames 
) const
inlinevirtual

Retrieve lists of all files and subdirectories in a directory.

Returns
Status.

Rationale:

  • this interface avoids having to lock the directory while an iterator is extant.
  • we cannot efficiently provide routines for returning files and subdirectories separately due to the underlying POSIX interface.

Implements IVFS.

◆ GetDirectoryRealPath()

virtual Status VFS::GetDirectoryRealPath ( const VfsPath pathname,
OsPath realPathname,
bool  createMissingDirectories 
)
inlinevirtual

Retrieve the real (POSIX) pathname underlying a VFS directory.

This is useful for passing paths to external libraries. Note that this returns the real path relative to the highest priority VFS subpath.

Parameters
createMissingDirectories- if true, create subdirectories on the file system as required. (this defaults to true because, in general, this function is then used to create new files).

Implements IVFS.

◆ GetFileInfo()

virtual Status VFS::GetFileInfo ( const VfsPath pathname,
CFileInfo pfileInfo 
) const
inlinevirtual

Retrieve information about a file (similar to POSIX stat).

Parameters
pathname
pfileInforeceives information about the file. Passing NULL suppresses warnings if the file doesn't exist.
Returns
Status.

Implements IVFS.

◆ GetFilePriority()

virtual Status VFS::GetFilePriority ( const VfsPath pathname,
size_t *  ppriority 
) const
inlinevirtual

Retrieve mount priority for a file.

Parameters
pathname
ppriorityreceives priority value, if the file can be found.
Returns
Status.

Implements IVFS.

◆ GetOriginalPath()

virtual Status VFS::GetOriginalPath ( const VfsPath filename,
OsPath loadedPathname 
)
inlinevirtual

Retrieve the POSIX pathname a VFS file was loaded from.

This is distinct from the current 'real' path, since that depends on the parent directory's real path, which may have been overwritten by a mod or another call to Mount().

This is used by the caching to split by mod, and you also ought to call this to delete a file. (note that deleting has other issues, see below).

Implements IVFS.

◆ GetRealPath()

virtual Status VFS::GetRealPath ( const VfsPath pathname,
OsPath realPathname,
bool  createMissingDirectories 
)
inlinevirtual

Retrieve the real (POSIX) pathname underlying a VFS file.

This is useful for passing paths to external libraries. Note that this returns the real path relative to the highest priority VFS subpath.

Parameters
createMissingDirectories- if true, create subdirectories on the file system as required. (this defaults to true because, in general, this function is then used to create new files).

Implements IVFS.

◆ GetVirtualPath()

virtual Status VFS::GetVirtualPath ( const OsPath realPathname,
VfsPath pathname 
)
inlinevirtual

retrieve the VFS pathname that corresponds to a real file.

this is useful for reacting to file change notifications.

the current implementation requires time proportional to the number of directories; this could be accelerated by only checking directories below a mount point with a matching real path.

Implements IVFS.

◆ LoadFile()

virtual Status VFS::LoadFile ( const VfsPath pathname,
std::shared_ptr< u8 > &  fileContents,
size_t &  size 
)
inlinevirtual

Read an entire file into memory.

Parameters
pathname
fileContentsreceives a smart pointer to the contents.
sizereceives the size [bytes] of the file contents.
Returns
Status.

Implements IVFS.

◆ Mount()

virtual Status VFS::Mount ( const VfsPath mountPoint,
const OsPath path,
size_t  flags,
size_t  priority 
)
inlinevirtual

mount a directory into the VFS.

Parameters
mountPoint(will be created if it does not already exist)
pathreal directory path
flags
priority
Returns
Status.

if files are encountered that already exist in the VFS (sub)directories, the most recent / highest priority/precedence version is preferred.

Note that the 'real directory' associated with a VFS Path will be relative to the highest priority subdirectory in the path, and that in case of equal priority, the order is undefined, and will depend on the exact order of populate() calls.

if files with archive extensions are seen, their contents are added as well.

Implements IVFS.

◆ RemoveFile()

virtual Status VFS::RemoveFile ( const VfsPath pathname)
inlinevirtual

remove file from the virtual directory listing.

Implements IVFS.

◆ RepopulateDirectory()

virtual Status VFS::RepopulateDirectory ( const VfsPath path)
inlinevirtual

request the directory be re-populated when it is next accessed.

useful for synchronizing with the underlying filesystem after files have been created or their metadata changed.

Implements IVFS.

◆ TextRepresentation()

virtual std::wstring VFS::TextRepresentation ( ) const
inlinevirtual
Returns
a string representation of all files and directories.

Implements IVFS.

Member Data Documentation

◆ m_rootDirectory

VfsDirectory VFS::m_rootDirectory
mutableprivate

◆ m_trace

PITrace VFS::m_trace
private

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