Skip to content

Commit b60fbc5

Browse files
committed
Implement BufferedOutputStream, ByteArrayInputStream, ByteArrayOutputStream
1 parent 62a8f1f commit b60fbc5

17 files changed

Lines changed: 290 additions & 73 deletions

data/mcswitch_functions.csv

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1882,7 +1882,7 @@ Address,Quality,Size,Name
18821882
0x00000071000496c8,U,000112,
18831883
0x0000007100049738,U,000168,_ZNK11BiomeSource18getBiomeIndexBlockEiiii
18841884
0x00000071000497e0,U,000364,_ZNK11BiomeSource18getBiomeIndexBlockER15arrayWithLengthIhEiiiib
1885-
0x000000710004994c,U,000112,
1885+
0x000000710004994c,O,000112,_ZN15arrayWithLengthIhE6resizeEj
18861886
0x00000071000499bc,U,000252,_ZN11BiomeSource12containsOnlyEiiiRKNSt3__16vectorIP5BiomeNS0_9allocatorIS3_EEEE
18871887
0x0000007100049ab8,U,000388,_ZN11BiomeSource9findBiomeEiiiNSt3__16vectorIP5BiomeNS0_9allocatorIS3_EEEEP6Random
18881888
0x0000007100049c3c,U,000008,_ZN11BiomeSource6updateEv
@@ -2760,15 +2760,15 @@ Address,Quality,Size,Name
27602760
0x0000007100075850,U,000012,
27612761
0x000000710007585c,U,000024,
27622762
0x0000007100075874,U,000008,
2763-
0x000000710007587c,U,000120,_ZN20BufferedOutputStreamC1EP12OutputStreami
2764-
0x00000071000758f4,U,000020,_ZN12OutputStreamC1Ev
2765-
0x0000007100075908,U,000064,_ZN20BufferedOutputStreamD1Ev
2766-
0x0000007100075948,U,000036,_ZN20BufferedOutputStreamD0Ev
2767-
0x000000710007596c,U,000060,_ZN20BufferedOutputStream5flushEv
2768-
0x00000071000759a8,U,000052,_ZN20BufferedOutputStream5closeEv
2769-
0x00000071000759dc,U,000200,_ZN20BufferedOutputStream5writeE15arrayWithLengthIhEjj
2770-
0x0000007100075aa4,U,000020,_ZN20BufferedOutputStream5writeE15arrayWithLengthIhE
2771-
0x0000007100075ab8,U,000096,_ZN20BufferedOutputStream5writeEj
2763+
0x000000710007587c,O,000120,_ZN20BufferedOutputStreamC1EP12OutputStreami
2764+
0x00000071000758f4,O,000020,_ZN12OutputStreamC2Ev
2765+
0x0000007100075908,O,000064,_ZN20BufferedOutputStreamD1Ev
2766+
0x0000007100075948,O,000036,_ZN20BufferedOutputStreamD0Ev
2767+
0x000000710007596c,O,000060,_ZN20BufferedOutputStream5flushEv
2768+
0x00000071000759a8,O,000052,_ZN20BufferedOutputStream5closeEv
2769+
0x00000071000759dc,O,000200,_ZN20BufferedOutputStream5writeE15arrayWithLengthIhEjj
2770+
0x0000007100075aa4,O,000020,_ZN20BufferedOutputStream5writeE15arrayWithLengthIhE
2771+
0x0000007100075ab8,O,000096,_ZN20BufferedOutputStream5writeEj
27722772
0x0000007100075b18,U,000096,_ZN14BufferedReaderC1Ev
27732773
0x0000007100075b78,U,000020,
27742774
0x0000007100075b8c,U,000200,
@@ -2930,26 +2930,26 @@ Address,Quality,Size,Name
29302930
0x000000710009b39c,U,000020,_ZN15WoodButtonBlock15shouldBlockTickEP5LevelRK8BlockPosPK10BlockState
29312931
0x000000710009b3b0,U,000068,_ZN15WoodButtonBlock10getTextureEPK9DirectionPK10BlockState
29322932
0x000000710009b3f4,U,000004,_ZN15WoodButtonBlock13registerIconsEP12IconRegister
2933-
0x000000710009b3f8,U,000116,
2934-
0x000000710009b46c,U,000020,_ZN11InputStreamC1Ev
2935-
0x000000710009b480,U,000088,__ct__20ByteArrayInputStreamF25arrayWithLength__tm__3_Uc
2936-
0x000000710009b4d8,U,000064,
2937-
0x000000710009b518,U,000020,
2938-
0x000000710009b52c,U,000140,
2939-
0x000000710009b5b8,U,000004,
2940-
0x000000710009b5bc,U,000036,
2941-
0x000000710009b5e0,U,000060,
2942-
0x000000710009b61c,U,000036,
2943-
0x000000710009b640,U,000100,_ZN21ByteArrayOutputStreamC1Ev
2944-
0x000000710009b6a4,U,000104,_ZN21ByteArrayOutputStreamC2Ej
2945-
0x000000710009b70c,U,000060,_ZN21ByteArrayOutputStreamD1Ev
2946-
0x000000710009b748,U,000036,_ZN21ByteArrayOutputStreamD0Ev
2947-
0x000000710009b76c,U,000104,_ZN21ByteArrayOutputStream5writeEj
2948-
0x000000710009b7d4,U,000020,_ZN21ByteArrayOutputStream5writeE15arrayWithLengthIhE
2949-
0x000000710009b7e8,U,000160,_ZN21ByteArrayOutputStream5writeE15arrayWithLengthIhEjj
2950-
0x000000710009b888,U,000004,_ZN21ByteArrayOutputStream5closeEv
2951-
0x000000710009b88c,U,000012,_ZN21ByteArrayOutputStream11toByteArrayEv
2952-
0x000000710009b898,U,000072,
2933+
0x000000710009b3f8,O,000116,_ZN20ByteArrayInputStreamC1E15arrayWithLengthIhEjj
2934+
0x000000710009b46c,O,000020,_ZN11InputStreamC2Ev
2935+
0x000000710009b480,O,000088,_ZN20ByteArrayInputStreamC1E15arrayWithLengthIhE
2936+
0x000000710009b4d8,O,000064,_ZN20ByteArrayInputStream4readEv
2937+
0x000000710009b518,O,000020,_ZN20ByteArrayInputStream4readE15arrayWithLengthIhE
2938+
0x000000710009b52c,O,000140,_ZN20ByteArrayInputStream4readE15arrayWithLengthIhEjj
2939+
0x000000710009b5b8,O,000004,_ZN20ByteArrayInputStream5closeEv
2940+
0x000000710009b5bc,O,000036,_ZN20ByteArrayInputStream4skipEx
2941+
0x000000710009b5e0,O,000060,_ZN20ByteArrayInputStreamD1Ev
2942+
0x000000710009b61c,O,000036,_ZN20ByteArrayInputStreamD0Ev
2943+
0x000000710009b640,O,000100,_ZN21ByteArrayOutputStreamC1Ev
2944+
0x000000710009b6a4,O,000104,_ZN21ByteArrayOutputStreamC1Ej
2945+
0x000000710009b70c,O,000060,_ZN21ByteArrayOutputStreamD1Ev
2946+
0x000000710009b748,O,000036,_ZN21ByteArrayOutputStreamD0Ev
2947+
0x000000710009b76c,O,000104,_ZN21ByteArrayOutputStream5writeEj
2948+
0x000000710009b7d4,O,000020,_ZN21ByteArrayOutputStream5writeE15arrayWithLengthIhE
2949+
0x000000710009b7e8,O,000160,_ZN21ByteArrayOutputStream5writeE15arrayWithLengthIhEjj
2950+
0x000000710009b888,O,000004,_ZN21ByteArrayOutputStream5closeEv
2951+
0x000000710009b88c,O,000012,_ZN21ByteArrayOutputStream11toByteArrayEv
2952+
0x000000710009b898,O,000072,_ZN15arrayWithLengthIhE15createFromOtherES0_
29532953
0x000000710009b8e0,O,000060,_ZN12ByteArrayTagC1Ev
29542954
0x000000710009b91c,O,000088,_ZN12ByteArrayTagC1E15arrayWithLengthIhEb
29552955
0x000000710009b974,O,000068,_ZN12ByteArrayTagD1Ev
@@ -4265,15 +4265,15 @@ Address,Quality,Size,Name
42654265
0x00000071000b6594,U,000160,
42664266
0x00000071000b6634,U,000128,
42674267
0x00000071000b66b4,U,000004,
4268-
0x00000071000b66b8,U,000004,vtbl_710103AD28_func_0
4269-
0x00000071000b66bc,U,000036,
4268+
0x00000071000b66b8,O,000004,_ZN12OutputStreamD2Ev
4269+
0x00000071000b66bc,O,000036,_ZN12OutputStreamD0Ev
42704270
0x00000071000b66e0,U,000004,
42714271
0x00000071000b66e4,U,000036,
42724272
0x00000071000b6708,U,000060,
42734273
0x00000071000b6744,U,000048,
42744274
0x00000071000b6774,U,000004,
4275-
0x00000071000b6778,U,000004,vtbl_710103AB98_func_0
4276-
0x00000071000b677c,U,000036,
4275+
0x00000071000b6778,O,000004,_ZN11InputStreamD2Ev
4276+
0x00000071000b677c,O,000036,_ZN11InputStreamD0Ev
42774277
0x00000071000b67a0,O,000004,_ZN3TagD2Ev
42784278
0x00000071000b67a4,U,000036,_ZN10NumericTagD0Ev
42794279
0x00000071000b67c8,O,000004,_ZN12ChunkStorageD2Ev
@@ -4743,7 +4743,7 @@ Address,Quality,Size,Name
47434743
0x00000071000c204c,U,000052,
47444744
0x00000071000c2080,U,000008,
47454745
0x00000071000c2088,U,000128,
4746-
0x00000071000c2108,U,000112,
4746+
0x00000071000c2108,M,000112,_ZN15arrayWithLengthIhE4copyEPhS1_j
47474747
0x00000071000c2178,U,000300,
47484748
0x00000071000c22a4,U,000008,
47494749
0x00000071000c22ac,U,000012,
@@ -41810,7 +41810,7 @@ Address,Quality,Size,Name
4181041810
0x000000710069109c,O,000044,_Z18PIXBeginNamedEventfPKcz
4181141811
0x00000071006910c8,O,000004,_Z16PIXEndNamedEventv
4181241812
0x00000071006910cc,U,000044,_Z22PIXSetMarkerDeprecatedfPKcz
41813-
0x00000071006910f8,U,000004,
41813+
0x00000071006910f8,U,000004,_Z7XMemCpyPvPKvj
4181441814
0x00000071006910fc,U,000004,
4181541815
0x0000007100691100,M,000004,_Z10XMemSet128Pvij
4181641816
0x0000007100691104,O,000004,_Z14XPhysicalAllocmmmj
@@ -44992,7 +44992,7 @@ Address,Quality,Size,Name
4499244992
0x000000710074ecb8,U,000076,_ZN7Texture4bindEi
4499344993
0x000000710074ed04,U,000200,_ZN12TextureAtlasC1EiRKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEES8_P13BufferedImageb
4499444994
0x000000710074edcc,U,000020,
44995-
0x000000710074ede0,M,000148,_ZN18TextureAtlasSprite6createERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEE
44995+
0x000000710074ede0,U,000148,_ZN18TextureAtlasSprite6createERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEE
4499644996
0x000000710074ee74,U,001408,_ZN12TextureAtlas6stitchEv
4499744997
0x000000710074f3f4,O,056148,_ZN12TextureAtlas7loadUVsEv
4499844998
0x000000710075cf48,U,000124,
@@ -46517,9 +46517,9 @@ Address,Quality,Size,Name
4651746517
0x000000710079c770,U,000040,
4651846518
0x000000710079c798,U,000012,
4651946519
0x000000710079c7a4,U,000012,
46520-
0x000000710079c7b0,U,000172,
46521-
0x000000710079c85c,U,000112,
46522-
0x000000710079c8cc,U,000044,
46520+
0x000000710079c7b0,U,000172,MakeCRCTable__8CStorageFv
46521+
0x000000710079c85c,U,000112,UpdateCRC__8CStorageFUiPUci
46522+
0x000000710079c8cc,U,000044,CRC__8CStorageFPUci
4652346523
0x000000710079c8f8,U,000084,SetDefaultImages__8CStorageFPUcUiT1T2T1T2
4652446524
0x000000710079c94c,U,000016,DoesSaveExist__8CStorageFPb
4652546525
0x000000710079c95c,U,000008,EnoughSpaceForAMinSaveGame__8CStorageFv
@@ -46586,7 +46586,7 @@ Address,Quality,Size,Name
4658646586
0x000000710079dfe0,U,000008,
4658746587
0x000000710079dfe8,U,000020,
4658846588
0x000000710079dffc,U,000020,
46589-
0x000000710079e010,U,000628,
46589+
0x000000710079e010,U,000628,SetSaveImages__8CStorageFPUcUiT1T2T1T2
4659046590
0x000000710079e284,U,000180,
4659146591
0x000000710079e338,U,000024,
4659246592
0x000000710079e350,U,000624,

lib/zlib/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Stripped version of zlib's CMakeLists.txt
22

3-
cmake_minimum_required(VERSION 3.5)
3+
cmake_minimum_required(VERSION 3.10)
44

55
project(zlib C)
66

src/Minecraft.Client/platform/NX/Platform.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ int XMemCreateDecompressionContext(_XMEMCODEC_TYPE type, const void* param_2, un
4040
void XMemDestroyCompressionContext(void* ctxt);
4141
void XMemDestroyDecompressionContext(void* ctxt);
4242

43+
// the last argument is 32 bit on Wii U Edition, but 64 bit on Switch, so I bet it's a size_t
44+
void XMemCpy(void* buf, const void* data, size_t size);
45+
4346
unsigned int TlsAlloc();
4447
int TlsFree(unsigned int unk);
4548
void* TlsGetValue(unsigned int index);

src/Minecraft.Core/System.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ void InitializeCriticalSection(nn::os::MutexType* mutex) {
99
}
1010

1111
long System::currentRealTimeMillis() {
12-
nn::time::PosixTime t; // they left uninitialized
12+
nn::time::PosixTime t;
1313
nn::time::StandardUserSystemClock::GetCurrentTime(&t);
1414
return t.time;
1515
}
@@ -61,7 +61,6 @@ void System::ReverseULONG(unsigned int* v) {
6161
*(reinterpret_cast<unsigned char*>(v) + 3) = lb;
6262
}
6363

64-
6564
// NON_MATCHING | Score 260 (lower is better)
6665
// Not sure but this (along with the others) probably uses some compiler intrinsic
6766
// I had to arrange this using odd then even
@@ -82,5 +81,3 @@ void System::ReverseCHAR16A(char16_t* str, int len) {
8281
for (int i = 0; i < len; i++)
8382
System::ReverseUSHORT(reinterpret_cast<unsigned short*>(str + i));
8483
}
85-
86-
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#include "Minecraft.Core/io/BufferedOutputStream.h"
2+
3+
#include "Minecraft.World/ArrayWithLength.h"
4+
5+
BufferedOutputStream::BufferedOutputStream(OutputStream* outputStream, int bufferSize) {
6+
mOutputStream = outputStream;
7+
mBuffer = arrayWithLength<unsigned char>(bufferSize, true);
8+
mSize = 0;
9+
}
10+
11+
BufferedOutputStream::~BufferedOutputStream() {
12+
delete mBuffer.data;
13+
mBuffer.data = nullptr;
14+
}
15+
16+
void BufferedOutputStream::write(unsigned int byte) {
17+
mBuffer[mSize++] = byte;
18+
if (mSize == mBuffer.length) {
19+
flush();
20+
}
21+
}
22+
23+
void BufferedOutputStream::write(arrayWithLength<unsigned char> array) {
24+
write(array, 0, array.length);
25+
}
26+
27+
void BufferedOutputStream::write(arrayWithLength<unsigned char> array, unsigned int start,
28+
unsigned int length) {
29+
if (length >= mBuffer.length) {
30+
flush();
31+
mOutputStream->write(array, start, length);
32+
return;
33+
}
34+
for (unsigned int i = 0; i < length; ++i) {
35+
write(array[start + i]);
36+
}
37+
}
38+
39+
void BufferedOutputStream::close() {
40+
flush();
41+
mOutputStream->close();
42+
}
43+
44+
void BufferedOutputStream::flush() {
45+
mOutputStream->write(mBuffer, 0, mSize);
46+
mSize = 0;
47+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#include "Minecraft.Client/platform/NX/Platform.h"
2+
#include "Minecraft.Core/io/ByteArrayInputStream.h"
3+
4+
ByteArrayInputStream::ByteArrayInputStream(arrayWithLength<unsigned char> array, unsigned int start,
5+
unsigned int length) {
6+
mLength = std::min(start + length, array.length);
7+
mCurrentPos = start;
8+
mNextPos = start;
9+
mBuffer = array;
10+
}
11+
12+
ByteArrayInputStream::ByteArrayInputStream(arrayWithLength<unsigned char> array) {
13+
mLength = array.length;
14+
mCurrentPos = 0;
15+
mNextPos = 0;
16+
mBuffer = array;
17+
}
18+
19+
ByteArrayInputStream::~ByteArrayInputStream() {
20+
delete[] mBuffer.data;
21+
}
22+
23+
int ByteArrayInputStream::read() {
24+
if (mNextPos < mLength)
25+
return mBuffer[mNextPos++];
26+
return -1;
27+
}
28+
29+
int ByteArrayInputStream::read(arrayWithLength<unsigned char> array) {
30+
return read(array, 0, array.length);
31+
}
32+
33+
int ByteArrayInputStream::read(arrayWithLength<unsigned char> array, unsigned int start,
34+
unsigned int length) {
35+
if (mNextPos == mLength)
36+
return -1;
37+
38+
int amount = std::min(length, mLength - mNextPos);
39+
XMemCpy(&array[start], &mBuffer[mNextPos], amount);
40+
mNextPos += amount;
41+
42+
return amount;
43+
}
44+
45+
void ByteArrayInputStream::close() {}
46+
47+
long long ByteArrayInputStream::skip(long long amount) {
48+
int newPos = mNextPos + amount;
49+
50+
if (newPos > mLength)
51+
newPos = mLength;
52+
53+
int difference = newPos - mNextPos;
54+
mNextPos = newPos;
55+
56+
return difference;
57+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#pragma once
2+
3+
#include "Minecraft.Core/io/InputStream.h"
4+
5+
class ByteArrayInputStream : public InputStream {
6+
public:
7+
ByteArrayInputStream(arrayWithLength<unsigned char> array, unsigned int start, unsigned int length);
8+
ByteArrayInputStream(arrayWithLength<unsigned char> array);
9+
10+
virtual ~ByteArrayInputStream() override;
11+
virtual int read() override;
12+
virtual int read(arrayWithLength<unsigned char>) override;
13+
virtual int read(arrayWithLength<unsigned char>, unsigned int, unsigned int) override;
14+
virtual void close() override;
15+
virtual long long skip(long long) override;
16+
17+
arrayWithLength<unsigned char> mBuffer;
18+
unsigned int mLength;
19+
unsigned int mCurrentPos;
20+
unsigned int mNextPos;
21+
};
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#include "Minecraft.Core/io/ByteArrayOutputStream.h"
2+
3+
#include "Minecraft.Client/platform/NX/Platform.h"
4+
5+
ByteArrayOutputStream::ByteArrayOutputStream() {
6+
mSize = 0;
7+
mBuffer = arrayWithLength<unsigned char>(0x20, true);
8+
}
9+
10+
ByteArrayOutputStream::ByteArrayOutputStream(unsigned int size) {
11+
mSize = 0;
12+
mBuffer = arrayWithLength<unsigned char>(size, true);
13+
}
14+
15+
ByteArrayOutputStream::~ByteArrayOutputStream() {
16+
delete[] mBuffer.data;
17+
}
18+
19+
void ByteArrayOutputStream::write(unsigned int byte) {
20+
if (mSize + 1 >= mBuffer.length)
21+
mBuffer.resize(mBuffer.length * 2);
22+
23+
mBuffer[mSize] = byte;
24+
mSize++;
25+
}
26+
27+
void ByteArrayOutputStream::write(arrayWithLength<unsigned char> array) {
28+
write(array, 0, array.length);
29+
}
30+
31+
void ByteArrayOutputStream::write(arrayWithLength<unsigned char> array, unsigned int start,
32+
unsigned int length) {
33+
if (mSize + length >= mBuffer.length)
34+
mBuffer.resize(std::max(mSize + length + 1, mBuffer.length * 2));
35+
36+
XMemCpy(&mBuffer[mSize], &array[start], length);
37+
38+
mSize += length;
39+
}
40+
41+
void ByteArrayOutputStream::close() {}
42+
43+
arrayWithLength<unsigned char> ByteArrayOutputStream::toByteArray() {
44+
return arrayWithLength<unsigned char>::createFromOther(mBuffer);
45+
}

src/Minecraft.Core/io/ByteArrayOutputStream.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66

77
class ByteArrayOutputStream : public OutputStream {
88
public:
9+
ByteArrayOutputStream();
910
ByteArrayOutputStream(unsigned int);
11+
1012
virtual ~ByteArrayOutputStream() override;
1113
virtual void write(unsigned int) override;
1214
virtual void write(arrayWithLength<unsigned char>) override;

src/Minecraft.Core/io/ConsoleSaveFileInputStream.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ class FileEntry;
77

88
class ConsoleSaveFileInputStream : public InputStream {
99
public:
10-
virtual unsigned int read() override;
11-
virtual void read(arrayWithLength<unsigned char>) override;
12-
virtual void read(arrayWithLength<unsigned char>, unsigned int, unsigned int) override;
10+
virtual int read() override;
11+
virtual int read(arrayWithLength<unsigned char>) override;
12+
virtual int read(arrayWithLength<unsigned char>, unsigned int, unsigned int) override;
1313
virtual void close() override;
14-
virtual void skip(long long) override;
14+
virtual long long skip(long long) override;
1515

1616
ConsoleSaveFile* mConsoleSaveFile;
1717
FileEntry* mFileEntry;

0 commit comments

Comments
 (0)