|
|
|
@ -340,12 +340,9 @@ namespace Google.Protobuf |
|
|
|
|
public static void WriteRawLittleEndian32(ref Span<byte> buffer, ref WriterInternalState state, uint value) |
|
|
|
|
{ |
|
|
|
|
const int length = sizeof(uint); |
|
|
|
|
if (state.position + length > state.limit) |
|
|
|
|
if (state.position + length > buffer.Length) |
|
|
|
|
{ |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)value); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 8)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 16)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 24)); |
|
|
|
|
WriteRawLittleEndian32SlowPath(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
@ -354,19 +351,21 @@ namespace Google.Protobuf |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.NoInlining)] |
|
|
|
|
private static void WriteRawLittleEndian32SlowPath(ref Span<byte> buffer, ref WriterInternalState state, uint value) |
|
|
|
|
{ |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)value); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 8)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 16)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 24)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static void WriteRawLittleEndian64(ref Span<byte> buffer, ref WriterInternalState state, ulong value) |
|
|
|
|
{ |
|
|
|
|
const int length = sizeof(ulong); |
|
|
|
|
if (state.position + length > state.limit) |
|
|
|
|
if (state.position + length > buffer.Length) |
|
|
|
|
{ |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)value); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 8)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 16)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 24)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 32)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 40)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 48)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 56)); |
|
|
|
|
WriteRawLittleEndian64SlowPath(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
@ -385,6 +384,19 @@ namespace Google.Protobuf |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.NoInlining)] |
|
|
|
|
public static void WriteRawLittleEndian64SlowPath(ref Span<byte> buffer, ref WriterInternalState state, ulong value) |
|
|
|
|
{ |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)value); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 8)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 16)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 24)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 32)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 40)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 48)); |
|
|
|
|
WriteRawByte(ref buffer, ref state, (byte)(value >> 56)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static void WriteRawByte(ref Span<byte> buffer, ref WriterInternalState state, byte value) |
|
|
|
|
{ |
|
|
|
|
if (state.position == state.limit) |
|
|
|
|