|
|
|
@ -32,14 +32,8 @@ |
|
|
|
|
|
|
|
|
|
using System; |
|
|
|
|
using System.Buffers; |
|
|
|
|
using System.Buffers.Binary; |
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
using System.IO; |
|
|
|
|
using System.Runtime.CompilerServices; |
|
|
|
|
using System.Runtime.InteropServices; |
|
|
|
|
using System.Security; |
|
|
|
|
using System.Text; |
|
|
|
|
using Google.Protobuf.Collections; |
|
|
|
|
|
|
|
|
|
namespace Google.Protobuf |
|
|
|
|
{ |
|
|
|
@ -101,166 +95,112 @@ namespace Google.Protobuf |
|
|
|
|
/// Writes a double field value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteDouble(double value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteDouble(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteDouble(double value) => WritingPrimitives.WriteDouble(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes a float field value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteFloat(float value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteFloat(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteFloat(float value) => WritingPrimitives.WriteFloat(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes a uint64 field value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteUInt64(ulong value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteUInt64(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteUInt64(ulong value) => WritingPrimitives.WriteUInt64(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes an int64 field value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteInt64(long value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteInt64(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteInt64(long value) => WritingPrimitives.WriteInt64(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes an int32 field value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteInt32(int value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteInt32(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteInt32(int value) => WritingPrimitives.WriteInt32(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes a fixed64 field value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteFixed64(ulong value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteFixed64(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteFixed64(ulong value) => WritingPrimitives.WriteFixed64(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes a fixed32 field value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteFixed32(uint value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteFixed32(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteFixed32(uint value) => WritingPrimitives.WriteFixed32(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes a bool field value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteBool(bool value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteBool(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteBool(bool value) => WritingPrimitives.WriteBool(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes a string field value, without a tag. |
|
|
|
|
/// The data is length-prefixed. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteString(string value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteString(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteString(string value) => WritingPrimitives.WriteString(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes a message, without a tag. |
|
|
|
|
/// The data is length-prefixed. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteMessage(IMessage value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitivesMessages.WriteMessage(ref this, value); |
|
|
|
|
} |
|
|
|
|
public void WriteMessage(IMessage value) => WritingPrimitivesMessages.WriteMessage(ref this, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes a group, without a tag, to the stream. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteGroup(IMessage value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitivesMessages.WriteGroup(ref this, value); |
|
|
|
|
} |
|
|
|
|
public void WriteGroup(IMessage value) => WritingPrimitivesMessages.WriteGroup(ref this, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Write a byte string, without a tag, to the stream. |
|
|
|
|
/// The data is length-prefixed. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteBytes(ByteString value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteBytes(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteBytes(ByteString value) => WritingPrimitives.WriteBytes(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes a uint32 value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteUInt32(uint value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteUInt32(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteUInt32(uint value) => WritingPrimitives.WriteUInt32(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes an enum value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteEnum(int value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteEnum(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteEnum(int value) => WritingPrimitives.WriteEnum(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes an sfixed32 value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write.</param> |
|
|
|
|
public void WriteSFixed32(int value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteSFixed32(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteSFixed32(int value) => WritingPrimitives.WriteSFixed32(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes an sfixed64 value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteSFixed64(long value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteSFixed64(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteSFixed64(long value) => WritingPrimitives.WriteSFixed64(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes an sint32 value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteSInt32(int value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteSInt32(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteSInt32(int value) => WritingPrimitives.WriteSInt32(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes an sint64 value, without a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="value">The value to write</param> |
|
|
|
|
public void WriteSInt64(long value) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteSInt64(ref buffer, ref state, value); |
|
|
|
|
} |
|
|
|
|
public void WriteSInt64(long value) => WritingPrimitives.WriteSInt64(ref buffer, ref state, value); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes a length (in bytes) for length-delimited data. |
|
|
|
@ -269,48 +209,33 @@ namespace Google.Protobuf |
|
|
|
|
/// This method simply writes a rawint, but exists for clarity in calling code. |
|
|
|
|
/// </remarks> |
|
|
|
|
/// <param name="length">Length value, in bytes.</param> |
|
|
|
|
public void WriteLength(int length) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteLength(ref buffer, ref state, length); |
|
|
|
|
} |
|
|
|
|
public void WriteLength(int length) => WritingPrimitives.WriteLength(ref buffer, ref state, length); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Encodes and writes a tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="fieldNumber">The number of the field to write the tag for</param> |
|
|
|
|
/// <param name="type">The wire format type of the tag to write</param> |
|
|
|
|
public void WriteTag(int fieldNumber, WireFormat.WireType type) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteTag(ref buffer, ref state, fieldNumber, type); |
|
|
|
|
} |
|
|
|
|
public void WriteTag(int fieldNumber, WireFormat.WireType type) => WritingPrimitives.WriteTag(ref buffer, ref state, fieldNumber, type); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes an already-encoded tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="tag">The encoded tag</param> |
|
|
|
|
public void WriteTag(uint tag) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteTag(ref buffer, ref state, tag); |
|
|
|
|
} |
|
|
|
|
public void WriteTag(uint tag) => WritingPrimitives.WriteTag(ref buffer, ref state, tag); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes the given single-byte tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="b1">The encoded tag</param> |
|
|
|
|
public void WriteRawTag(byte b1) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteRawTag(ref buffer, ref state, b1); |
|
|
|
|
} |
|
|
|
|
public void WriteRawTag(byte b1) => WritingPrimitives.WriteRawTag(ref buffer, ref state, b1); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes the given two-byte tag. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="b1">The first byte of the encoded tag</param> |
|
|
|
|
/// <param name="b2">The second byte of the encoded tag</param> |
|
|
|
|
public void WriteRawTag(byte b1, byte b2) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteRawTag(ref buffer, ref state, b1, b2); |
|
|
|
|
} |
|
|
|
|
public void WriteRawTag(byte b1, byte b2) => WritingPrimitives.WriteRawTag(ref buffer, ref state, b1, b2); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes the given three-byte tag. |
|
|
|
@ -318,10 +243,7 @@ namespace Google.Protobuf |
|
|
|
|
/// <param name="b1">The first byte of the encoded tag</param> |
|
|
|
|
/// <param name="b2">The second byte of the encoded tag</param> |
|
|
|
|
/// <param name="b3">The third byte of the encoded tag</param> |
|
|
|
|
public void WriteRawTag(byte b1, byte b2, byte b3) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteRawTag(ref buffer, ref state, b1, b2, b3); |
|
|
|
|
} |
|
|
|
|
public void WriteRawTag(byte b1, byte b2, byte b3) => WritingPrimitives.WriteRawTag(ref buffer, ref state, b1, b2, b3); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes the given four-byte tag. |
|
|
|
@ -330,10 +252,7 @@ namespace Google.Protobuf |
|
|
|
|
/// <param name="b2">The second byte of the encoded tag</param> |
|
|
|
|
/// <param name="b3">The third byte of the encoded tag</param> |
|
|
|
|
/// <param name="b4">The fourth byte of the encoded tag</param> |
|
|
|
|
public void WriteRawTag(byte b1, byte b2, byte b3, byte b4) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteRawTag(ref buffer, ref state, b1, b2, b3, b4); |
|
|
|
|
} |
|
|
|
|
public void WriteRawTag(byte b1, byte b2, byte b3, byte b4) => WritingPrimitives.WriteRawTag(ref buffer, ref state, b1, b2, b3, b4); |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Writes the given five-byte tag. |
|
|
|
@ -343,20 +262,11 @@ namespace Google.Protobuf |
|
|
|
|
/// <param name="b3">The third byte of the encoded tag</param> |
|
|
|
|
/// <param name="b4">The fourth byte of the encoded tag</param> |
|
|
|
|
/// <param name="b5">The fifth byte of the encoded tag</param> |
|
|
|
|
public void WriteRawTag(byte b1, byte b2, byte b3, byte b4, byte b5) |
|
|
|
|
{ |
|
|
|
|
WritingPrimitives.WriteRawTag(ref buffer, ref state, b1, b2, b3, b4, b5); |
|
|
|
|
} |
|
|
|
|
public void WriteRawTag(byte b1, byte b2, byte b3, byte b4, byte b5) => WritingPrimitives.WriteRawTag(ref buffer, ref state, b1, b2, b3, b4, b5); |
|
|
|
|
|
|
|
|
|
internal void Flush() |
|
|
|
|
{ |
|
|
|
|
WriteBufferHelper.Flush(ref buffer, ref state); |
|
|
|
|
} |
|
|
|
|
internal void Flush() => WriteBufferHelper.Flush(ref buffer, ref state); |
|
|
|
|
|
|
|
|
|
internal void CheckNoSpaceLeft() |
|
|
|
|
{ |
|
|
|
|
WriteBufferHelper.CheckNoSpaceLeft(ref state); |
|
|
|
|
} |
|
|
|
|
internal void CheckNoSpaceLeft() => WriteBufferHelper.CheckNoSpaceLeft(ref state); |
|
|
|
|
|
|
|
|
|
internal void CopyStateTo(CodedOutputStream output) |
|
|
|
|
{ |
|
|
|
|