wut v1.9.1
Wii U Toolchain
Loading...
Searching...
No Matches
FileStream.h
Go to the documentation of this file.
1#pragma once
2
3#include <wut.h>
5#include <nn/result.h>
6#include <nn/sl/IStream.h>
8
9#ifdef __cplusplus
10
11namespace nn::sl
12{
13namespace details
14{
22WUT_CHECK_SIZE(FileStreamInternal, 0x10);
23WUT_CHECK_OFFSET(FileStreamInternal, 0x00, vtable);
24WUT_CHECK_OFFSET(FileStreamInternal, 0x04, fsClient);
25WUT_CHECK_OFFSET(FileStreamInternal, 0x08, fsCmdBlock);
26WUT_CHECK_OFFSET(FileStreamInternal, 0x0C, fileHandle);
27
28extern "C" nn::Result
30extern "C" FileStreamInternal *
32extern "C" void
34} // namespace details
35
37{
38public:
40 {
41 __ct__Q3_2nn2sl10FileStreamFv(&mInstance);
42 }
43
44 ~FileStream() override
45 {
46 __dt__Q3_2nn2sl10FileStreamFv(&mInstance, 2);
47 }
48
50 Read(uint32_t *bytesRead, void *buffer, uint32_t readSize) override
51 {
52 auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
53 return base->vtable->ReadFn(base, bytesRead, buffer, readSize);
54 }
56 Write(uint32_t *bytesWritten, void *buffer, uint32_t readSize) override
57 {
58 auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
59 return base->vtable->WriteFn(base, bytesWritten, buffer, readSize);
60 }
62 GetSize(uint32_t *fileSize) override
63 {
64 auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
65 return base->vtable->GetSizeFn(base, fileSize);
66 }
68 Seek(int32_t offset, nn::sl::SeekOrigin seekOrigin) override
69 {
70 auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
71 return base->vtable->SeekFn(base, offset, seekOrigin);
72 }
73
78 Initialize(FSClient *client, FSCmdBlock *cmdBlock, char const *path, char const *mode)
79 {
80 return Initialize__Q3_2nn2sl10FileStreamFP8FSClientP10FSCmdBlockPCcT3(&mInstance, client, cmdBlock, path, mode);
81 }
82
84 GetInternal() override
85 {
86 return reinterpret_cast<details::IStreamInternal *>(&mInstance);
87 }
88
89private:
90 details::FileStreamInternal mInstance = {};
91};
92
93}; // namespace nn::sl
94
95#endif
Result value type used by nn libraries.
Definition result.h:70
nn::Result Initialize(FSClient *client, FSCmdBlock *cmdBlock, char const *path, char const *mode)
The given client and cmd must be valid during the whole liftime of the filestream.
Definition FileStream.h:78
nn::Result GetSize(uint32_t *fileSize) override
Definition FileStream.h:62
nn::Result Read(uint32_t *bytesRead, void *buffer, uint32_t readSize) override
Definition FileStream.h:50
~FileStream() override
Definition FileStream.h:44
details::IStreamInternal * GetInternal() override
Definition FileStream.h:84
nn::Result Write(uint32_t *bytesWritten, void *buffer, uint32_t readSize) override
Definition FileStream.h:56
nn::Result Seek(int32_t offset, nn::sl::SeekOrigin seekOrigin) override
Definition FileStream.h:68
uint32_t FSFileHandle
Definition filesystem.h:32
nn::Result Initialize__Q3_2nn2sl10FileStreamFP8FSClientP10FSCmdBlockPCcT3(FileStreamInternal *, FSClient *, FSCmdBlock *, char const *, char const *)
IStreamInternalVTable * vtable
FileStreamInternal * __ct__Q3_2nn2sl10FileStreamFv(FileStreamInternal *)
void __dt__Q3_2nn2sl10FileStreamFv(FileStreamInternal *, int)
SeekOrigin
Definition sl_cpp.h:293