Merge pull request #26 from elijah-thomas774/ut_FileStream

ut_FileStream
This commit is contained in:
Elijah Thomas
2024-05-05 00:03:30 -04:00
committed by GitHub
5 changed files with 77 additions and 12 deletions
+1
View File
@@ -192,6 +192,7 @@ nw4r/ut/ut_IOStream.cpp:
nw4r/ut/ut_FileStream.cpp:
.text start:0x8042B560 end:0x8042B6EC
.ctors start:0x804DB93C end:0x804DB940
.sbss start:0x80576598 end:0x805765A0
nw4r/ut/ut_DvdFileStream.cpp:
.text start:0x8042B6F0 end:0x8042BDAC
+3 -3
View File
@@ -23969,8 +23969,8 @@ CancelAsync__Q34nw4r2ut10FileStreamFPFlPQ34nw4r2ut8IOStreamPv_vPv = .text:0x8042
Skip__Q44nw4r2ut10FileStream12FilePositionFl = .text:0x8042B580; // type:function size:0x64
Append__Q44nw4r2ut10FileStream12FilePositionFl = .text:0x8042B5F0; // type:function size:0x50
Seek__Q44nw4r2ut10FileStream12FilePositionFlUl = .text:0x8042B640; // type:function size:0x88
GetRuntimeTypeInfo__Q34nw4r2ut10FileStreamCFv = .text:0x8042B6D0; // type:function size:0x8
__sinit_\ut_FileStream_cpp = .text:0x8042B6E0; // type:function size:0xC
GetRuntimeTypeInfo__Q34nw4r2ut10FileStreamCFv = .text:0x8042B6D0; // type:function size:0x8 scope:weak
__sinit_\ut_FileStream_cpp = .text:0x8042B6E0; // type:function size:0xC scope:local
DvdAsyncCallback___Q34nw4r2ut13DvdFileStreamFlP11DVDFileInfo = .text:0x8042B6F0; // type:function size:0x2C
DvdCBAsyncCallback___Q34nw4r2ut13DvdFileStreamFlP15DVDCommandBlock = .text:0x8042B720; // type:function size:0x28
__ct__Q34nw4r2ut13DvdFileStreamFl = .text:0x8042B750; // type:function size:0xBC
@@ -40809,7 +40809,7 @@ lbl_80576580 = .sbss:0x80576580; // type:object size:0x1 data:byte
lbl_80576584 = .sbss:0x80576584; // type:object size:0x4 data:4byte
lbl_80576588 = .sbss:0x80576588; // type:object size:0x8 data:4byte
typeInfo__Q34nw4r2ut8IOStream = .sbss:0x80576590; // type:object size:0x4 data:4byte
lbl_80576598 = .sbss:0x80576598; // type:object size:0x8 data:4byte
typeInfo__Q34nw4r2ut10FileStream = .sbss:0x80576598; // type:object size:0x4 data:4byte
lbl_805765A0 = .sbss:0x805765A0; // type:object size:0x8 data:4byte
lbl_805765A8 = .sbss:0x805765A8; // type:object size:0x8 data:4byte
lbl_805765B0 = .sbss:0x805765B0; // type:object size:0x8
+1 -1
View File
@@ -324,7 +324,7 @@ config.libs = [
Object(NonMatching, "nw4r/ut/ut_CharStrmReader.cpp"),
Object(Matching, "nw4r/ut/ut_IOStream.cpp"),
Object(Matching, "nw4r/ut/ut_TagProcessorBase.cpp"),
Object(NonMatching, "nw4r/ut/ut_FileStream.cpp"),
Object(Matching, "nw4r/ut/ut_FileStream.cpp"),
Object(NonMatching, "nw4r/ut/ut_DvdFileStream.cpp"),
Object(NonMatching, "nw4r/ut/ut_DvdLockedFileStream.cpp"),
Object(NonMatching, "nw4r/ut/ut_NandFileStream.cpp"),
+14 -8
View File
@@ -16,14 +16,20 @@ public:
public:
FilePosition() : mFileSize(0), mFileOffset(0) {}
u32 GetFileSize() const { return mFileSize; }
void SetFileSize(u32 fileSize) { mFileSize = fileSize; }
u32 GetFileSize() const {
return mFileSize;
}
void SetFileSize(unsigned long fileSize) {
mFileSize = fileSize;
}
u32 Tell() const { return mFileOffset; }
u32 Tell() const {
return mFileOffset;
}
u32 Skip(s32 offset);
u32 Append(s32 offset);
void Seek(s32 offset, u32 origin);
u32 Skip(long offset);
u32 Append(long offset);
void Seek(long offset, unsigned long origin);
private:
u32 mFileSize; // at 0x0
@@ -35,9 +41,9 @@ public:
virtual ~FileStream() {} // at 0xC
virtual u32 GetSize() const = 0; // at 0x40
virtual void Seek(s32 offset, u32 origin); // at 0x44
virtual void Seek(long offset, unsigned long origin); // at 0x44
virtual void Cancel(); // at 0x48
virtual bool CancelAsync(AsyncCallback callback, void* arg); // at 0x4C
virtual bool CancelAsync(AsyncCallback callback, void *arg); // at 0x4C
virtual bool CanSeek() const = 0; // at 0x50
virtual bool CanCancel() const = 0; // at 0x54
virtual u32 Tell() const = 0; // at 0x58
+58
View File
@@ -0,0 +1,58 @@
#include <nw4r/ut.h>
namespace nw4r {
namespace ut {
NW4R_UT_RTTI_DEF_DERIVED(FileStream, IOStream);
void FileStream::Cancel() {}
bool FileStream::CancelAsync(AsyncCallback callback, void *arg) {
#pragma unused(callback)
#pragma unused(arg)
return true;
}
u32 FileStream::FilePosition::Skip(long offset) {
if (offset != 0) {
s64 newOffset = mFileOffset + offset;
mFileOffset = Clamp<s64>(newOffset, 0, mFileSize);
}
return mFileOffset;
}
u32 FileStream::FilePosition::Append(long offset) {
s64 newOffset = mFileOffset + offset;
if (newOffset < 0) {
mFileOffset = 0;
} else {
mFileOffset = newOffset;
mFileSize = Max(mFileOffset, mFileSize);
}
return mFileOffset;
}
void FileStream::FilePosition::Seek(long offset, unsigned long origin) {
switch (origin) {
case SEEK_BEG:
mFileOffset = 0;
break;
case SEEK_END:
mFileOffset = mFileSize;
break;
case SEEK_CUR:
default:
break;
}
Skip(offset);
}
// TODO: This should not be necessary. Because of nw4r::snd? still the case for ss
DECOMP_FORCEACTIVE(ut_FileStream_cpp, FileStream::GetRuntimeTypeInfo);
} // namespace ut
} // namespace nw4r