wut v1.9.1
Wii U Toolchain
Loading...
Searching...
No Matches
IStream.h
Go to the documentation of this file.
1#pragma once
2
3#include <wut.h>
4#include <nn/result.h>
6#include <nn/sl/sl_cpp.h>
7
8#ifdef __cplusplus
9
10namespace nn::sl
11{
13{
14
15public:
17 {
18 InitInternalVtable();
19 }
20
22 {
23 InitInternalVtable();
24 }
25
26 IStream &
27 operator=(const IStream &other)
28 {
29 InitInternalVtable();
30 return *this;
31 }
32
33 IStream &
34 operator=(IStream &&src) noexcept
35 {
36 InitInternalVtable();
37 return *this;
38 }
39
40 ~IStream() override = default;
41
42private:
43 static nn::Result
44 ReadWrapper(details::IStreamInternal *instance, uint32_t *bytesRead, void *buffer, uint32_t readSize)
45 {
46 return instance->vtable->instance->Read(bytesRead, buffer, readSize);
47 }
48
49 static nn::Result
50 WriteWrapper(details::IStreamInternal *instance, uint32_t *bytesWritten, void *buffer, uint32_t readSize)
51 {
52 return instance->vtable->instance->Write(bytesWritten, buffer, readSize);
53 }
54
55 static nn::Result
56 GetSizeWrapper(details::IStreamInternal *instance, uint32_t *fileSize)
57 {
58 return instance->vtable->instance->GetSize(fileSize);
59 }
60
61 static nn::Result
62 SeekWrapper(details::IStreamInternal *instance, int32_t offset, nn::sl::SeekOrigin seekOrigin)
63 {
64 return instance->vtable->instance->Seek(offset, seekOrigin);
65 }
66
67 details::IStreamInternal *
68 GetInternal() override
69 {
70 return &mInstance;
71 }
72
73 void
74 InitInternalVtable()
75 {
76 mVTable = {.instance = this,
77 .ReadFn = &ReadWrapper,
78 .WriteFn = &WriteWrapper,
79 .GetSizeFn = &GetSizeWrapper,
80 .SeekFn = &SeekWrapper};
81 mInstance.vtable = &mVTable;
82 }
83
84 details::IStreamInternal mInstance{};
85 details::IStreamInternalVTable mVTable{};
86};
87} // namespace nn::sl
88
89#endif
Result value type used by nn libraries.
Definition result.h:70
IStream(IStream &src)
Definition IStream.h:21
IStream & operator=(const IStream &other)
Definition IStream.h:27
IStream & operator=(IStream &&src) noexcept
Definition IStream.h:34
~IStream() override=default
virtual nn::Result Read(uint32_t *bytesRead, void *buffer, uint32_t readSize)=0
virtual nn::Result Write(uint32_t *bytesWritten, void *buffer, uint32_t writeSize)=0
IStreamInternalVTable * vtable
SeekOrigin
Definition sl_cpp.h:293