Skip to content

Commit 1e49a2f

Browse files
committed
Add Half writing support to EndianWriter
Extended the EndianWriter class with two new methods: - Write(Half value): Converts a Half to UInt16 and writes it. - WriteArray(ReadOnlySpan<Half> buffer): Writes an array of Half values, handling alignment if necessary.
1 parent 34a0dc7 commit 1e49a2f

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

AssetRipper.IO.Endian/EndianWriter.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ public override void Write(ulong value)
7676
base.Write(IsLittleEndian ? value : BinaryPrimitives.ReverseEndianness(value));
7777
}
7878

79+
public override void Write(Half value)
80+
{
81+
Write(BitConverter.HalfToUInt16Bits(value));
82+
}
83+
7984
public override void Write(float value)
8085
{
8186
Write(BitConverter.SingleToUInt32Bits(value));
@@ -295,6 +300,26 @@ public void WriteArray(ReadOnlySpan<ulong> buffer)
295300
}
296301
}
297302

303+
public void WriteArray(ReadOnlySpan<Half> buffer)
304+
{
305+
Write(buffer.Length);
306+
int index = 0;
307+
while (index < buffer.Length)
308+
{
309+
int left = buffer.Length - index;
310+
int toWrite = left < BufferSize ? left : BufferSize;
311+
for (int i = 0; i < toWrite; i += sizeof(ushort), index++)
312+
{
313+
FillInnerBuffer(BitConverter.HalfToUInt16Bits(buffer[index]), i);
314+
}
315+
Write(m_buffer, 0, toWrite);
316+
}
317+
if (IsAlignArray)
318+
{
319+
AlignStream();
320+
}
321+
}
322+
298323
public void WriteArray(ReadOnlySpan<float> buffer)
299324
{
300325
Write(buffer.Length);

0 commit comments

Comments
 (0)