6636f3ff47
Neither of these functions require the use of shared ownership of the returned pointer. This makes it more difficult to create reference cycles with, and makes the interface more generic, as std::shared_ptr instances can be created from a std::unique_ptr, but the vice-versa isn't possible. This also alters relevant functions to take NCA arguments by const reference rather than a const reference to a std::shared_ptr. These functions don't alter the ownership of the memory used by the NCA instance, so we can make the interface more generic by not assuming anything about the type of smart pointer the NCA is contained within and make it the caller's responsibility to ensure the supplied NCA is valid.
56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
// Copyright 2018 yuzu emulator team
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include "common/common_types.h"
|
|
#include "core/file_sys/vfs.h"
|
|
#include "core/loader/loader.h"
|
|
|
|
namespace FileSys {
|
|
class NACP;
|
|
class XCI;
|
|
} // namespace FileSys
|
|
|
|
namespace Loader {
|
|
|
|
class AppLoader_NCA;
|
|
|
|
/// Loads an XCI file
|
|
class AppLoader_XCI final : public AppLoader {
|
|
public:
|
|
explicit AppLoader_XCI(FileSys::VirtualFile file);
|
|
~AppLoader_XCI();
|
|
|
|
/**
|
|
* Returns the type of the file
|
|
* @param file std::shared_ptr<VfsFile> open file
|
|
* @return FileType found, or FileType::Error if this loader doesn't know it
|
|
*/
|
|
static FileType IdentifyType(const FileSys::VirtualFile& file);
|
|
|
|
FileType GetFileType() override {
|
|
return IdentifyType(file);
|
|
}
|
|
|
|
ResultStatus Load(Kernel::Process& process) override;
|
|
|
|
ResultStatus ReadRomFS(FileSys::VirtualFile& file) override;
|
|
u64 ReadRomFSIVFCOffset() const override;
|
|
ResultStatus ReadUpdateRaw(FileSys::VirtualFile& file) override;
|
|
ResultStatus ReadProgramId(u64& out_program_id) override;
|
|
ResultStatus ReadIcon(std::vector<u8>& buffer) override;
|
|
ResultStatus ReadTitle(std::string& title) override;
|
|
|
|
private:
|
|
std::unique_ptr<FileSys::XCI> xci;
|
|
std::unique_ptr<AppLoader_NCA> nca_loader;
|
|
|
|
FileSys::VirtualFile icon_file;
|
|
std::unique_ptr<FileSys::NACP> nacp_file;
|
|
};
|
|
|
|
} // namespace Loader
|