mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-10 08:09:26 +01:00
7c45afecb2
Some callers already have the file info, making the relatively slow FindFileInfo calls unnecessary. Callers that didn't have the file info will now need to call FindFileInfo on their own.
64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
// Copyright 2008 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "Common/CommonTypes.h"
|
|
#include "DiscIO/Volume.h"
|
|
|
|
namespace DiscIO
|
|
{
|
|
// TODO: eww
|
|
class FileInfoGCWii;
|
|
|
|
// file info of an FST entry
|
|
class FileInfo
|
|
{
|
|
public:
|
|
virtual ~FileInfo();
|
|
|
|
// Not guaranteed to return a meaningful value for directories
|
|
virtual u64 GetOffset() const = 0;
|
|
// Not guaranteed to return a meaningful value for directories
|
|
virtual u64 GetSize() const = 0;
|
|
virtual bool IsDirectory() const = 0;
|
|
virtual const std::string& GetName() const = 0;
|
|
};
|
|
|
|
class FileSystem
|
|
{
|
|
public:
|
|
FileSystem(const Volume* _rVolume, const Partition& partition);
|
|
|
|
virtual ~FileSystem();
|
|
virtual bool IsValid() const = 0;
|
|
// TODO: Should only return FileInfo, not FileInfoGCWii
|
|
virtual const std::vector<FileInfoGCWii>& GetFileList() = 0;
|
|
virtual const FileInfo* FindFileInfo(const std::string& path) = 0;
|
|
virtual const FileInfo* FindFileInfo(u64 disc_offset) = 0;
|
|
virtual u64 ReadFile(const FileInfo* file_info, u8* _pBuffer, u64 _MaxBufferSize,
|
|
u64 _OffsetInFile = 0) = 0;
|
|
virtual bool ExportFile(const FileInfo* file_info, const std::string& _rExportFilename) = 0;
|
|
virtual bool ExportApploader(const std::string& _rExportFolder) const = 0;
|
|
virtual bool ExportDOL(const std::string& _rExportFolder) const = 0;
|
|
virtual std::string GetPath(u64 _Address) = 0;
|
|
virtual std::string GetPathFromFSTOffset(size_t file_info_offset) = 0;
|
|
virtual std::optional<u64> GetBootDOLOffset() const = 0;
|
|
virtual std::optional<u32> GetBootDOLSize(u64 dol_offset) const = 0;
|
|
|
|
virtual const Partition GetPartition() const { return m_partition; }
|
|
protected:
|
|
const Volume* const m_rVolume;
|
|
const Partition m_partition;
|
|
};
|
|
|
|
std::unique_ptr<FileSystem> CreateFileSystem(const Volume* volume, const Partition& partition);
|
|
|
|
} // namespace
|