|
|
|
@ -504,6 +504,20 @@ namespace Google.Protobuf |
|
|
|
|
/// Writes the given two-byte tag directly to the stream. |
|
|
|
|
/// </summary> |
|
|
|
|
public static void WriteRawTag(ref Span<byte> buffer, ref WriterInternalState state, byte b1, byte b2) |
|
|
|
|
{ |
|
|
|
|
if (state.position + 2 > buffer.Length) |
|
|
|
|
{ |
|
|
|
|
WriteRawTagSlowPath(ref buffer, ref state, b1, b2); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
buffer[state.position++] = b1; |
|
|
|
|
buffer[state.position++] = b2; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.NoInlining)] |
|
|
|
|
private static void WriteRawTagSlowPath(ref Span<byte> buffer, ref WriterInternalState state, byte b1, byte b2) |
|
|
|
|
{ |
|
|
|
|
WriteRawByte(ref buffer, ref state, b1); |
|
|
|
|
WriteRawByte(ref buffer, ref state, b2); |
|
|
|
@ -513,6 +527,21 @@ namespace Google.Protobuf |
|
|
|
|
/// Writes the given three-byte tag directly to the stream. |
|
|
|
|
/// </summary> |
|
|
|
|
public static void WriteRawTag(ref Span<byte> buffer, ref WriterInternalState state, byte b1, byte b2, byte b3) |
|
|
|
|
{ |
|
|
|
|
if (state.position + 3 > buffer.Length) |
|
|
|
|
{ |
|
|
|
|
WriteRawTagSlowPath(ref buffer, ref state, b1, b2, b3); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
buffer[state.position++] = b1; |
|
|
|
|
buffer[state.position++] = b2; |
|
|
|
|
buffer[state.position++] = b3; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.NoInlining)] |
|
|
|
|
private static void WriteRawTagSlowPath(ref Span<byte> buffer, ref WriterInternalState state, byte b1, byte b2, byte b3) |
|
|
|
|
{ |
|
|
|
|
WriteRawByte(ref buffer, ref state, b1); |
|
|
|
|
WriteRawByte(ref buffer, ref state, b2); |
|
|
|
@ -523,6 +552,23 @@ namespace Google.Protobuf |
|
|
|
|
/// Writes the given four-byte tag directly to the stream. |
|
|
|
|
/// </summary> |
|
|
|
|
public static void WriteRawTag(ref Span<byte> buffer, ref WriterInternalState state, byte b1, byte b2, byte b3, byte b4) |
|
|
|
|
{ |
|
|
|
|
if (state.position + 4 > buffer.Length) |
|
|
|
|
{ |
|
|
|
|
WriteRawTagSlowPath(ref buffer, ref state, b1, b2, b3, b4); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
buffer[state.position++] = b1; |
|
|
|
|
buffer[state.position++] = b2; |
|
|
|
|
buffer[state.position++] = b3; |
|
|
|
|
buffer[state.position++] = b4; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.NoInlining)] |
|
|
|
|
|
|
|
|
|
private static void WriteRawTagSlowPath(ref Span<byte> buffer, ref WriterInternalState state, byte b1, byte b2, byte b3, byte b4) |
|
|
|
|
{ |
|
|
|
|
WriteRawByte(ref buffer, ref state, b1); |
|
|
|
|
WriteRawByte(ref buffer, ref state, b2); |
|
|
|
@ -534,6 +580,23 @@ namespace Google.Protobuf |
|
|
|
|
/// Writes the given five-byte tag directly to the stream. |
|
|
|
|
/// </summary> |
|
|
|
|
public static void WriteRawTag(ref Span<byte> buffer, ref WriterInternalState state, byte b1, byte b2, byte b3, byte b4, byte b5) |
|
|
|
|
{ |
|
|
|
|
if (state.position + 5 > buffer.Length) |
|
|
|
|
{ |
|
|
|
|
WriteRawTagSlowPath(ref buffer, ref state, b1, b2, b3, b4, b5); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
buffer[state.position++] = b1; |
|
|
|
|
buffer[state.position++] = b2; |
|
|
|
|
buffer[state.position++] = b3; |
|
|
|
|
buffer[state.position++] = b4; |
|
|
|
|
buffer[state.position++] = b5; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.NoInlining)] |
|
|
|
|
private static void WriteRawTagSlowPath(ref Span<byte> buffer, ref WriterInternalState state, byte b1, byte b2, byte b3, byte b4, byte b5) |
|
|
|
|
{ |
|
|
|
|
WriteRawByte(ref buffer, ref state, b1); |
|
|
|
|
WriteRawByte(ref buffer, ref state, b2); |
|
|
|
|