sead
Loading...
Searching...
No Matches
seadArchiveRes.h
Go to the documentation of this file.
1#ifndef SEAD_ARCHIVE_RES_H_
2#define SEAD_ARCHIVE_RES_H_
3
4#include <basis/seadAssert.h>
5#include <filedevice/seadFileDevice.h>
6#include <heap/seadHeap.h>
7#include <prim/seadSafeString.h>
8#include <resource/seadResource.h>
9
10namespace sead {
11
13{
15
16public:
18 {
19 public:
20 explicit FileInfo()
21 : mStartOffset(0)
22 , mLength(0)
23 {
24 }
25
26 u32 getStartOffset() const { return mStartOffset; }
27 u32 getLength() const { return mLength; }
28
29 private:
32
33 friend class ArchiveRes;
34 };
35#ifdef cafe
36 static_assert(sizeof(FileInfo) == 8, "sead::ArchiveRes::FileInfo size mismatch");
37#endif // cafe
38
39public:
42 , mEnable(false)
43 {
44 }
45
46 ~ArchiveRes() override { }
47
48 u32 getLoadDataAlignment() override { return 0x80; }
49
50protected:
51 void doCreate_(u8* buf, u32, Heap*) override;
52
53 virtual void* getFileImpl_(const SafeString& file_path, FileInfo* file_info) = 0;
54 virtual void* getFileFastImpl_(s32 entry_id, FileInfo* file_info) = 0;
55 virtual s32 convertPathToEntryIDImpl_(const SafeString& file_path) = 0;
56 virtual bool setCurrentDirectoryImpl_(const SafeString& file_path) = 0;
57 virtual bool openDirectoryImpl_(HandleBuffer* handle_buffer, const SafeString& dir_path) = 0;
58 virtual bool closeDirectoryImpl_(HandleBuffer* handle_buffer) = 0;
59 virtual u32 readDirectoryImpl_(HandleBuffer* handle_buffer, DirectoryEntry* entry, u32 num) = 0;
60 virtual bool prepareArchive_(const void* archive) = 0;
61
62public:
64
65 u8* getFile(const SafeString& file_path, FileInfo* file_info = nullptr)
66 {
68 return static_cast<u8*>(getFileImpl_(file_path, file_info));
69 }
70
71 u8* getFileFast(s32 entry_id, FileInfo* file_info = nullptr)
72 {
74 return static_cast<u8*>(getFileFastImpl_(entry_id, file_info));
75 }
76
78 {
80 return convertPathToEntryIDImpl_(file_path);
81 }
82
83 bool setCurrentDirectory(const SafeString& file_path)
84 {
86 return setCurrentDirectoryImpl_(file_path);
87 }
88
89 bool openDirectory(HandleBuffer* handle_buffer, const SafeString& dir_path)
90 {
91 SEAD_ASSERT(handle_buffer);
92 return openDirectoryImpl_(handle_buffer, dir_path);
93 }
94
95 bool closeDirectory(HandleBuffer* handle_buffer)
96 {
97 SEAD_ASSERT(handle_buffer);
98 return closeDirectoryImpl_(handle_buffer);
99 }
100
101 u32 readDirectory(HandleBuffer* handle_buffer, DirectoryEntry* entry, u32 num)
102 {
103 SEAD_ASSERT(handle_buffer);
104 SEAD_ASSERT(entry);
105 return readDirectoryImpl_(handle_buffer, entry, num);
106 }
107
108protected:
109 void setFileInfo(FileInfo* file_info, u32 start_offset, u32 length)
110 {
111 SEAD_ASSERT(file_info);
112 file_info->mStartOffset = start_offset;
113 file_info->mLength = length;
114 }
115
116protected:
118};
119#ifdef cafe
120static_assert(sizeof(ArchiveRes) == 0x28, "sead::ArchiveRes size mismatch");
121#endif // cafe
122
123} // namespace sead
124
125#endif // SEAD_ARCHIVE_RES_H_
Definition seadArchiveRes.h:18
FileInfo()
Definition seadArchiveRes.h:20
u32 getLength() const
Definition seadArchiveRes.h:27
u32 mLength
Definition seadArchiveRes.h:31
u32 getStartOffset() const
Definition seadArchiveRes.h:26
u32 mStartOffset
Definition seadArchiveRes.h:30
Definition seadArchiveRes.h:13
u32 getLoadDataAlignment() override
Definition seadArchiveRes.h:48
ArchiveRes()
Definition seadArchiveRes.h:40
bool mEnable
Definition seadArchiveRes.h:117
virtual bool setCurrentDirectoryImpl_(const SafeString &file_path)=0
bool setCurrentDirectory(const SafeString &file_path)
Definition seadArchiveRes.h:83
virtual u32 readDirectoryImpl_(HandleBuffer *handle_buffer, DirectoryEntry *entry, u32 num)=0
bool closeDirectory(HandleBuffer *handle_buffer)
Definition seadArchiveRes.h:95
ResourcePtr load(ResourceMgr::LoadArg &arg)
Definition seadArchiveRes.cpp:12
void doCreate_(u8 *buf, u32, Heap *) override
Definition seadArchiveRes.cpp:7
virtual void * getFileFastImpl_(s32 entry_id, FileInfo *file_info)=0
virtual bool prepareArchive_(const void *archive)=0
bool openDirectory(HandleBuffer *handle_buffer, const SafeString &dir_path)
Definition seadArchiveRes.h:89
virtual void * getFileImpl_(const SafeString &file_path, FileInfo *file_info)=0
virtual s32 convertPathToEntryIDImpl_(const SafeString &file_path)=0
~ArchiveRes() override
Definition seadArchiveRes.h:46
u8 * getFile(const SafeString &file_path, FileInfo *file_info=nullptr)
Definition seadArchiveRes.h:65
virtual bool openDirectoryImpl_(HandleBuffer *handle_buffer, const SafeString &dir_path)=0
u8 * getFileFast(s32 entry_id, FileInfo *file_info=nullptr)
Definition seadArchiveRes.h:71
u32 readDirectory(HandleBuffer *handle_buffer, DirectoryEntry *entry, u32 num)
Definition seadArchiveRes.h:101
virtual bool closeDirectoryImpl_(HandleBuffer *handle_buffer)=0
s32 convertPathToEntryID(const SafeString &file_path)
Definition seadArchiveRes.h:77
void setFileInfo(FileInfo *file_info, u32 start_offset, u32 length)
Definition seadArchiveRes.h:109
Definition seadResource.h:30
DirectResource()
Definition seadResource.cpp:18
Definition seadHeap.h:23
Definition seadResourceMgr.h:45
Definition seadResourceMgr.h:16
Definition seadAssert.h:44
SafeStringBase< char > SafeString
Definition seadSafeString.h:409
SafeArray< u8, 32 > HandleBuffer
Definition seadFileDevice.h:15
#define SEAD_ASSERT(condition)
Definition seadAssert.h:24
#define SEAD_RTTI_OVERRIDE(CLASS, BASE)
Definition seadRuntimeTypeInfo.h:96
Definition seadFileDevice.h:443
Definition seadResourceMgr.h:77