mirror of
https://github.com/zeldaret/ss
synced 2026-05-23 23:05:20 -04:00
26af4db82d
* update from dtk-template and start work towards using clangd * include <a> -> "a" * Update build.yml * remove/add non-trivial class in union warning
113 lines
3.1 KiB
C++
113 lines
3.1 KiB
C++
#ifndef NW4R_UT_DVD_FILE_STREAM_H
|
|
#define NW4R_UT_DVD_FILE_STREAM_H
|
|
|
|
#include "nw4r/types_nw4r.h"
|
|
#include "nw4r/ut/ut_FileStream.h"
|
|
#include "rvl/DVD.h" // IWYU pragma: export
|
|
|
|
namespace nw4r {
|
|
namespace ut {
|
|
|
|
class DvdFileStream : public FileStream {
|
|
public:
|
|
NW4R_UT_RTTI_DECL(DvdFileStream);
|
|
|
|
/**
|
|
* DVD callbacks need a reference to the NW4R stream. This structure is
|
|
* used to up-cast the DVDFileInfo given to the async callback.
|
|
*
|
|
* This structure's DVDFileInfo is always used in calls to async DVD
|
|
* functions, so the up-cast is always safe.
|
|
*/
|
|
struct AsyncContext {
|
|
DVDFileInfo info; // at 0x0
|
|
DvdFileStream *stream; // at 0x3C
|
|
};
|
|
|
|
public:
|
|
DvdFileStream(s32 entrynum);
|
|
DvdFileStream(const DVDFileInfo *info, bool close);
|
|
virtual ~DvdFileStream(); // at 0xC
|
|
|
|
virtual bool IsBusy() const {
|
|
return mIsBusy;
|
|
} // at 0x24
|
|
|
|
virtual u32 Tell() const {
|
|
return mFilePosition.Tell();
|
|
} // at 0x58
|
|
virtual u32 GetSize() const {
|
|
return mFilePosition.GetFileSize();
|
|
} // at 0x40
|
|
|
|
virtual bool CanAsync() const {
|
|
return true;
|
|
} // at 0x28
|
|
virtual bool CanSeek() const {
|
|
return true;
|
|
} // at 0x50
|
|
virtual bool CanRead() const {
|
|
return true;
|
|
} // at 0x2C
|
|
virtual bool CanWrite() const {
|
|
return false;
|
|
} // at 0x30
|
|
virtual bool CanCancel() const {
|
|
return true;
|
|
} // at 0x54
|
|
|
|
virtual u32 GetOffsetAlign() const {
|
|
return 4;
|
|
} // at 0x34
|
|
virtual u32 GetSizeAlign() const {
|
|
return 32;
|
|
} // at 0x38
|
|
virtual u32 GetBufferAlign() const {
|
|
return 32;
|
|
} // at 0x3C
|
|
|
|
virtual void Close(); // at 0x10
|
|
|
|
virtual s32 Read(void *dst, u32 size); // at 0x14
|
|
virtual bool ReadAsync(void *dst, u32 size, AsyncCallback callback,
|
|
void *arg); // at 0x18
|
|
|
|
virtual s32 Peek(void *dst, u32 size); // at 0x5C
|
|
virtual bool PeekAsync(void *dst, u32 size, AsyncCallback callback,
|
|
void *arg); // at 0x60
|
|
|
|
virtual void Seek(s32 offset, u32 origin); // at 0x44
|
|
|
|
virtual void Cancel(); // at 0x48
|
|
virtual bool CancelAsync(AsyncCallback callback, void *arg); // at 0x4C
|
|
|
|
void SetPriority(s32 priority) {
|
|
mPriority = priority;
|
|
}
|
|
|
|
bool Open(s32 entrynum);
|
|
bool Open(const DVDFileInfo *info, bool close);
|
|
|
|
private:
|
|
static void DvdAsyncCallback_(s32 result, DVDFileInfo *info);
|
|
static void DvdCBAsyncCallback_(s32 result, DVDCommandBlock *block);
|
|
|
|
void Initialize_();
|
|
u32 AdjustReadLength_(u32 len);
|
|
|
|
private:
|
|
FilePosition mFilePosition; // at 0x14
|
|
AsyncCallback mCancelCallback; // at 0x1C
|
|
void *mCancelCallbackArg; // at 0x20
|
|
volatile bool mIsCancelling; // at 0x24
|
|
AsyncContext mAsyncContext; // at 0x28
|
|
s32 mPriority; // at 0x68
|
|
volatile bool mIsBusy; // at 0x6C
|
|
bool mCloseOnDestroy; // at 0x6D
|
|
bool mAllowClose; // at 0x6E
|
|
};
|
|
|
|
} // namespace ut
|
|
} // namespace nw4r
|
|
#endif
|