mirror of
https://github.com/devkitPro/wut.git
synced 2026-04-19 07:47:20 -05:00
Some checks failed
C/C++ CI / ubuntu-latest (push) Has been cancelled
`find . -regex '.*\.\(cpp\|hpp\|cu\|cuh\|c\|h\)' -exec clang-format -style=file -i {} \;`
89 lines
1.9 KiB
C++
89 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include <wut.h>
|
|
#include <nn/result.h>
|
|
#include <nn/sl/details/IStreamDetails.h>
|
|
#include <nn/sl/sl_cpp.h>
|
|
|
|
#ifdef __cplusplus
|
|
|
|
namespace nn::sl
|
|
{
|
|
class IStream : public details::IStreamBase
|
|
{
|
|
|
|
public:
|
|
IStream()
|
|
{
|
|
InitInternalVtable();
|
|
}
|
|
|
|
IStream(IStream &src)
|
|
{
|
|
InitInternalVtable();
|
|
}
|
|
|
|
IStream &
|
|
operator=(const IStream &other)
|
|
{
|
|
InitInternalVtable();
|
|
return *this;
|
|
}
|
|
|
|
IStream &
|
|
operator=(IStream &&src) noexcept
|
|
{
|
|
InitInternalVtable();
|
|
return *this;
|
|
}
|
|
|
|
~IStream() override = default;
|
|
|
|
private:
|
|
static nn::Result
|
|
ReadWrapper(details::IStreamInternal *instance, uint32_t *bytesRead, void *buffer, uint32_t readSize)
|
|
{
|
|
return instance->vtable->instance->Read(bytesRead, buffer, readSize);
|
|
}
|
|
|
|
static nn::Result
|
|
WriteWrapper(details::IStreamInternal *instance, uint32_t *bytesWritten, void *buffer, uint32_t readSize)
|
|
{
|
|
return instance->vtable->instance->Write(bytesWritten, buffer, readSize);
|
|
}
|
|
|
|
static nn::Result
|
|
GetSizeWrapper(details::IStreamInternal *instance, uint32_t *fileSize)
|
|
{
|
|
return instance->vtable->instance->GetSize(fileSize);
|
|
}
|
|
|
|
static nn::Result
|
|
SeekWrapper(details::IStreamInternal *instance, int32_t offset, nn::sl::SeekOrigin seekOrigin)
|
|
{
|
|
return instance->vtable->instance->Seek(offset, seekOrigin);
|
|
}
|
|
|
|
details::IStreamInternal *
|
|
GetInternal() override
|
|
{
|
|
return &mInstance;
|
|
}
|
|
|
|
void
|
|
InitInternalVtable()
|
|
{
|
|
mVTable = {.instance = this,
|
|
.ReadFn = &ReadWrapper,
|
|
.WriteFn = &WriteWrapper,
|
|
.GetSizeFn = &GetSizeWrapper,
|
|
.SeekFn = &SeekWrapper};
|
|
mInstance.vtable = &mVTable;
|
|
}
|
|
|
|
details::IStreamInternal mInstance{};
|
|
details::IStreamInternalVTable mVTable{};
|
|
};
|
|
} // namespace nn::sl
|
|
|
|
#endif |