|
@@ -306,166 +306,6 @@ namespace Google.Protobuf
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
- #region Write array members, with fields.
|
|
|
- public void WriteMessageArray<T>(int fieldNumber, RepeatedField<T> list)
|
|
|
- where T : IMessage
|
|
|
- {
|
|
|
- foreach (T value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
|
|
|
- WriteMessage(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteStringArray(int fieldNumber, RepeatedField<string> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
|
|
|
- WriteString(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteBytesArray(int fieldNumber, RepeatedField<ByteString> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
|
|
|
- WriteBytes(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteBoolArray(int fieldNumber, RepeatedField<bool> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Varint);
|
|
|
- WriteBool(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteInt32Array(int fieldNumber, RepeatedField<int> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Varint);
|
|
|
- WriteInt32(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteSInt32Array(int fieldNumber, RepeatedField<int> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Varint);
|
|
|
- WriteSInt32(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteUInt32Array(int fieldNumber, RepeatedField<uint> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Varint);
|
|
|
- WriteUInt32(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteFixed32Array(int fieldNumber, RepeatedField<uint> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Fixed32);
|
|
|
- WriteFixed32(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteSFixed32Array(int fieldNumber, RepeatedField<int> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Fixed32);
|
|
|
- WriteSFixed32(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteInt64Array(int fieldNumber, RepeatedField<long> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Fixed64);
|
|
|
- WriteInt64(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteSInt64Array(int fieldNumber, RepeatedField<long> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Varint);
|
|
|
- WriteSInt64(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteUInt64Array(int fieldNumber, RepeatedField<ulong> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Varint);
|
|
|
- WriteUInt64(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteFixed64Array(int fieldNumber, RepeatedField<ulong> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Fixed64);
|
|
|
- WriteFixed64(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteSFixed64Array(int fieldNumber, RepeatedField<long> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Fixed64);
|
|
|
- WriteSFixed64(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteDoubleArray(int fieldNumber, RepeatedField<double> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Fixed64);
|
|
|
- WriteDouble(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteFloatArray(int fieldNumber, RepeatedField<float> list)
|
|
|
- {
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Fixed32);
|
|
|
- WriteFloat(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteEnumArray<T>(int fieldNumber, RepeatedField<T> list)
|
|
|
- where T : struct, IComparable, IFormattable
|
|
|
- {
|
|
|
- // Bit of a hack, to access the values as ints
|
|
|
- var iterator = list.GetInt32Enumerator();
|
|
|
- while (iterator.MoveNext())
|
|
|
- {
|
|
|
- WriteTag(fieldNumber, WireFormat.WireType.Varint);
|
|
|
- WriteEnum(iterator.Current);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- #endregion
|
|
|
-
|
|
|
#region Raw tag writing
|
|
|
/// <summary>
|
|
|
/// Encodes and writes a tag.
|
|
@@ -534,171 +374,6 @@ namespace Google.Protobuf
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
- #region Write packed array members
|
|
|
- // TODO(jonskeet): A lot of these are really inefficient, due to method group conversions. Fix!
|
|
|
- // (Alternatively, add extension methods to RepeatedField, accepting the Write* methods via delegates too.)
|
|
|
- public void WritePackedBoolArray(RepeatedField<bool> list)
|
|
|
- {
|
|
|
- uint size = (uint)list.Count;
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteBool(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedInt32Array(RepeatedField<int> list)
|
|
|
- {
|
|
|
- uint size = list.CalculateSize(ComputeInt32Size);
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteInt32(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedSInt32Array(RepeatedField<int> list)
|
|
|
- {
|
|
|
- uint size = list.CalculateSize(ComputeSInt32Size);
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteSInt32(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedUInt32Array(RepeatedField<uint> list)
|
|
|
- {
|
|
|
- uint size = list.CalculateSize(ComputeUInt32Size);
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteUInt32(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedFixed32Array(RepeatedField<uint> list)
|
|
|
- {
|
|
|
- uint size = (uint) list.Count * 4;
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteFixed32(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedSFixed32Array(RepeatedField<int> list)
|
|
|
- {
|
|
|
- uint size = (uint) list.Count * 4;
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteSFixed32(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedInt64Array(RepeatedField<long> list)
|
|
|
- {
|
|
|
- uint size = list.CalculateSize(ComputeInt64Size);
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteInt64(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedSInt64Array(RepeatedField<long> list)
|
|
|
- {
|
|
|
- uint size = list.CalculateSize(ComputeSInt64Size);
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteSInt64(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedUInt64Array(RepeatedField<ulong> list)
|
|
|
- {
|
|
|
- if (list.Count == 0)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- uint size = list.CalculateSize(ComputeUInt64Size);
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteUInt64(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedFixed64Array(RepeatedField<ulong> list)
|
|
|
- {
|
|
|
- uint size = (uint) list.Count * 8;
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteFixed64(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedSFixed64Array(RepeatedField<long> list)
|
|
|
- {
|
|
|
- uint size = (uint) list.Count * 8;
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteSFixed64(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedDoubleArray(RepeatedField<double> list)
|
|
|
- {
|
|
|
- uint size = (uint) list.Count * 8;
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteDouble(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedFloatArray(RepeatedField<float> list)
|
|
|
- {
|
|
|
- if (list.Count == 0)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- uint size = (uint) list.Count * 4;
|
|
|
- WriteRawVarint32(size);
|
|
|
- foreach (var value in list)
|
|
|
- {
|
|
|
- WriteFloat(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WritePackedEnumArray<T>(RepeatedField<T> list)
|
|
|
- where T : struct, IComparable, IFormattable
|
|
|
- {
|
|
|
- if (list.Count == 0)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- // Bit of a hack, to access the values as ints
|
|
|
- var iterator = list.GetInt32Enumerator();
|
|
|
- uint size = 0;
|
|
|
- while (iterator.MoveNext())
|
|
|
- {
|
|
|
- size += (uint) ComputeEnumSize(iterator.Current);
|
|
|
- }
|
|
|
- iterator.Reset();
|
|
|
- WriteRawVarint32(size);
|
|
|
- while (iterator.MoveNext())
|
|
|
- {
|
|
|
- WriteEnum(iterator.Current);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- #endregion
|
|
|
-
|
|
|
#region Underlying writing primitives
|
|
|
/// <summary>
|
|
|
/// Writes a 32 bit value as a varint. The fast route is taken when
|