1#ifndef SEAD_MAIN_FILEDEVICE_H_
2#define SEAD_MAIN_FILEDEVICE_H_
3
4#include <basis/seadTypes.h>
5#include <filedevice/seadFileDevice.h>
6#include <prim/seadRuntimeTypeInfo.h>
7#include <prim/seadSafeString.h>
8
9namespace sead
10{
11class MainFileDevice : public FileDevice
12{
13 SEAD_RTTI_OVERRIDE(MainFileDevice, FileDevice)
14
15public:
16 explicit MainFileDevice(Heap* heap);
17 ~MainFileDevice() override;
18
19 void traceFilePath(const SafeString& path) const override;
20 void traceDirectoryPath(const SafeString& path) const override;
21 void resolveFilePath(BufferedSafeString* out, const SafeString& path) const override;
22 void resolveDirectoryPath(BufferedSafeString* out, const SafeString& path) const override;
23
24protected:
25 bool doIsAvailable_() const override { return mFileDevice->isAvailable(); }
26
27 FileDevice* doOpen_(FileHandle* handle, const SafeString& path, FileOpenFlag flag) override
28 {
29 return mFileDevice->tryOpen(handle, path, flag, handle->getDivSize());
30 }
31
32 bool doClose_(FileHandle* handle) override { return mFileDevice->tryClose(handle); }
33
34 bool doFlush_(FileHandle* handle) override { return mFileDevice->tryFlush(handle); }
35
36 bool doRemove_(const SafeString& str) override { return mFileDevice->tryRemove(str); }
37
38 bool doRead_(u32* bytesRead, FileHandle* handle, u8* outBuffer, u32 bytesToRead) override
39 {
40 return mFileDevice->tryRead(bytesRead, handle, outBuffer, bytesToRead);
41 }
42
43 bool doWrite_(u32* bytesWritten, FileHandle* handle, const u8* inBuffer,
44 u32 bytesToWrite) override
45 {
46 return mFileDevice->tryWrite(bytesWritten, handle, inBuffer, bytesToWrite);
47 }
48
49 bool doSeek_(FileHandle* handle, s32 offset, SeekOrigin origin) override
50 {
51 return mFileDevice->trySeek(handle, offset, origin);
52 }
53
54 bool doGetCurrentSeekPos_(u32* seekPos, FileHandle* handle) override
55 {
56 return mFileDevice->tryGetCurrentSeekPos(seekPos, handle);
57 }
58
59 bool doGetFileSize_(u32* fileSize, const SafeString& path) override
60 {
61 return mFileDevice->tryGetFileSize(fileSize, path);
62 }
63
64 bool doGetFileSize_(u32* fileSize, FileHandle* handle) override
65 {
66 return mFileDevice->tryGetFileSize(fileSize, handle);
67 }
68
69 bool doIsExistFile_(bool* exists, const SafeString& path) override
70 {
71 return mFileDevice->tryIsExistFile(exists, path);
72 }
73
74 bool doIsExistDirectory_(bool* exists, const SafeString& path) override
75 {
76 return mFileDevice->tryIsExistDirectory(exists, path);
77 }
78
79 FileDevice* doOpenDirectory_(DirectoryHandle* handle, const SafeString& path) override
80 {
81 return mFileDevice->tryOpenDirectory(handle, path);
82 }
83
84 bool doCloseDirectory_(DirectoryHandle* handle) override
85 {
86 return mFileDevice->tryCloseDirectory(handle);
87 }
88
89 bool doReadDirectory_(u32* entriesRead, DirectoryHandle* handle, DirectoryEntry* entries,
90 u32 entriesToRead) override
91 {
92 return mFileDevice->tryReadDirectory(entriesRead, handle, entries, entriesToRead);
93 }
94
95 bool doMakeDirectory_(const SafeString& path, u32 x) override
96 {
97 return mFileDevice->tryMakeDirectory(path, x);
98 }
99
100 s32 doGetLastRawError_() const override { return mFileDevice->getLastRawError(); }
101
102 bool isMatchDevice_(const HandleBase* handle) const override
103 {
104 return mFileDevice->isMatchDevice_(handle);
105 }
106
107 FileDevice* mFileDevice;
108};
109
110} // namespace sead
111
112#endif // SEAD_MAIN_FILEDEVICE_H_
113