Skip to content

Commit 902fb77

Browse files
committed
Added support for fixed size arrays
1 parent b124f5e commit 902fb77

File tree

2 files changed

+29
-23
lines changed

2 files changed

+29
-23
lines changed

MLAPI/NetworkingManagerComponents/Binary/BitReader.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,16 @@ public byte ReadByte()
4141
public short ReadShort() => (short)ZigZagDecode(ReadUShort(), 2);
4242
public int ReadInt() => (int)ZigZagDecode(ReadUInt(), 4);
4343
public long ReadLong() => ZigZagDecode(ReadULong(), 8);
44-
public float[] ReadFloatArray() => ReadArray(ReadFloat);
45-
public double[] ReadDoubleArray() => ReadArray(ReadDouble);
46-
public byte[] ReadByteArray() => ReadArray(ReadByte);
47-
public ushort[] ReadUShortArray() => ReadArray(ReadUShort);
48-
public uint[] ReadUIntArray() => ReadArray(ReadUInt);
49-
public ulong[] ReadULongArray() => ReadArray(ReadULong);
50-
public sbyte[] ReadSByteArray() => ReadArray(ReadSByte);
51-
public short[] ReadShortArray() => ReadArray(ReadShort);
52-
public int[] ReadIntArray() => ReadArray(ReadInt);
53-
public long[] ReadLongArray() => ReadArray(ReadLong);
44+
public float[] ReadFloatArray(int known = -1) => ReadArray(ReadFloat, known);
45+
public double[] ReadDoubleArray(int known = -1) => ReadArray(ReadDouble, known);
46+
public byte[] ReadByteArray(int known = -1) => ReadArray(ReadByte, known);
47+
public ushort[] ReadUShortArray(int known = -1) => ReadArray(ReadUShort, known);
48+
public uint[] ReadUIntArray(int known = -1) => ReadArray(ReadUInt, known);
49+
public ulong[] ReadULongArray(int known = -1) => ReadArray(ReadULong, known);
50+
public sbyte[] ReadSByteArray(int known = -1) => ReadArray(ReadSByte, known);
51+
public short[] ReadShortArray(int known = -1) => ReadArray(ReadShort, known);
52+
public int[] ReadIntArray(int known = -1) => ReadArray(ReadInt, known);
53+
public long[] ReadLongArray(int known = -1) => ReadArray(ReadLong, known);
5454
public string ReadString() => Encoding.UTF8.GetString(ReadByteArray());
5555

5656
private ulong ReadULong()
@@ -79,9 +79,9 @@ private ulong ReadULong()
7979
}
8080
return res;
8181
}
82-
private T[] ReadArray<T>(Getter<T> g)
82+
private T[] ReadArray<T>(Getter<T> g, int knownSize = -1)
8383
{
84-
T[] result = new T[ReadUShort()];
84+
T[] result = new T[knownSize > 0 ? (uint)knownSize : ReadUInt()];
8585
for (ushort s = 0; s < result.Length; ++s)
8686
result[s] = g();
8787
return result;

MLAPI/NetworkingManagerComponents/Binary/BitWriter.cs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -91,17 +91,23 @@ private void Push<T>(T b)
9191
public void WriteShort(short s) => Push(s);
9292
public void WriteInt(int i) => Push(i);
9393
public void WriteLong(long l) => Push(l);
94-
public void WriteFloatArray(float[] f) => Push(f);
95-
public void WriteDoubleArray(double[] d) => Push(d);
96-
public void WriteByteArray(byte[] b) => Push(b);
97-
public void WriteUShortArray(ushort[] s) => Push(s);
98-
public void WriteUIntArray(uint[] i) => Push(i);
99-
public void WriteULongArray(ulong[] l) => Push(l);
100-
public void WriteSByteArray(sbyte[] b) => Push(b);
101-
public void WriteShortArray(short[] s) => Push(s);
102-
public void WriteIntArray(int[] i) => Push(i);
103-
public void WriteLongArray(long[] l) => Push(l);
10494
public void WriteString(string s) => Push(s);
95+
public void WriteFloatArray(float[] f, bool known = false) => PushArray(f, known);
96+
public void WriteDoubleArray(double[] d, bool known = false) => PushArray(d, known);
97+
public void WriteByteArray(byte[] b, bool known = false) => PushArray(b, known);
98+
public void WriteUShortArray(ushort[] s, bool known = false) => PushArray(s, known);
99+
public void WriteUIntArray(uint[] i, bool known = false) => PushArray(i, known);
100+
public void WriteULongArray(ulong[] l, bool known = false) => PushArray(l, known);
101+
public void WriteSByteArray(sbyte[] b, bool known = false) => PushArray(b, known);
102+
public void WriteShortArray(short[] s, bool known = false) => PushArray(s, known);
103+
public void WriteIntArray(int[] i, bool known = false) => PushArray(i, known);
104+
public void WriteLongArray(long[] l, bool known = false) => PushArray(l, known);
105+
106+
private void PushArray<T>(T[] t, bool knownSize = false)
107+
{
108+
if (!knownSize) Push(t);
109+
else foreach (T t1 in t) Push(t1);
110+
}
105111

106112
public long Finalize(ref byte[] buffer)
107113
{
@@ -139,7 +145,7 @@ private static void Serialize<T>(T t, byte[] writeTo, ref long bitOffset)
139145
if (type.IsArray)
140146
{
141147
var array = t as Array;
142-
Serialize((ushort)array.Length, writeTo, ref bitOffset);
148+
Serialize((uint)array.Length, writeTo, ref bitOffset);
143149
foreach (var element in array)
144150
Serialize(element, writeTo, ref bitOffset);
145151
}

0 commit comments

Comments
 (0)