aboutsummaryrefslogtreecommitdiff
path: root/src/ProtocolBuffers
diff options
context:
space:
mode:
authorcsharptest <roger@csharptest.net>2011-06-10 01:09:57 -0500
committerrogerk <devnull@localhost>2011-06-10 01:09:57 -0500
commitb00ea13eb1b8055a0cde89d01bbde6d95e5cd1a5 (patch)
tree52fd58c77ff0b54a7a9c6a41e5619a485f54e111 /src/ProtocolBuffers
parentced18e10ae9ca41f338c9e788642d705dd17f9d4 (diff)
downloadprotobuf-b00ea13eb1b8055a0cde89d01bbde6d95e5cd1a5.tar.gz
protobuf-b00ea13eb1b8055a0cde89d01bbde6d95e5cd1a5.tar.bz2
protobuf-b00ea13eb1b8055a0cde89d01bbde6d95e5cd1a5.zip
Refactoring the ICoded interfaces (again) removing the use of some generic methods.
Diffstat (limited to 'src/ProtocolBuffers')
-rw-r--r--src/ProtocolBuffers/CodedInputStream.cs472
-rw-r--r--src/ProtocolBuffers/CodedOutputStream.cs671
-rw-r--r--src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs44
-rw-r--r--src/ProtocolBuffers/ICodedInputStream.cs52
-rw-r--r--src/ProtocolBuffers/ICodedOutputStream.cs115
5 files changed, 810 insertions, 544 deletions
diff --git a/src/ProtocolBuffers/CodedInputStream.cs b/src/ProtocolBuffers/CodedInputStream.cs
index aad47f96..72f5d2f6 100644
--- a/src/ProtocolBuffers/CodedInputStream.cs
+++ b/src/ProtocolBuffers/CodedInputStream.cs
@@ -513,14 +513,39 @@ namespace Google.ProtocolBuffers
return true;
}
+ private bool BeginArray(uint fieldTag, out bool isPacked, out int oldLimit)
+ {
+ isPacked = WireFormat.GetTagWireType(fieldTag) == WireFormat.WireType.LengthDelimited;
+
+ if (isPacked)
+ {
+ int length = (int) (ReadRawVarint32() & int.MaxValue);
+ if (length > 0)
+ {
+ oldLimit = PushLimit(length);
+ return true;
+ }
+ oldLimit = -1;
+ return false; //packed but empty
+ }
+
+ oldLimit = -1;
+ return true;
+ }
+
/// <summary>
/// Returns true if the next tag is also part of the same unpacked array
/// </summary>
- private bool ContinueArray(uint currentTag, bool packed)
+ private bool ContinueArray(uint currentTag, bool packed, int oldLimit)
{
if (packed)
{
- return !ReachedLimit;
+ if (ReachedLimit)
+ {
+ PopLimit(oldLimit);
+ return false;
+ }
+ return true;
}
string ignore;
@@ -563,239 +588,238 @@ namespace Google.ProtocolBuffers
if (ReadPrimitiveField(fieldType, ref value))
list.Add(value);
}
- while (ContinueArray(fieldTag, false));
+ while (ContinueArray(fieldTag, false, 0));
}
}
[CLSCompliant(false)]
- public void ReadPrimitiveArray<T>(FieldType fieldType, uint fieldTag, string fieldName, ICollection<T> list)
+ public void ReadStringArray(uint fieldTag, string fieldName, ICollection<string> list)
{
- WireFormat.WireType normal = WireFormat.GetWireType(fieldType);
- WireFormat.WireType wformat = WireFormat.GetTagWireType(fieldTag);
+ string tmp = null;
+ do
+ {
+ ReadString(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, false, 0));
+ }
- // 2.3 allows packed form even if the field is not declared packed.
- if (normal != wformat && wformat == WireFormat.WireType.LengthDelimited)
+ [CLSCompliant(false)]
+ public void ReadBytesArray(uint fieldTag, string fieldName, ICollection<ByteString> list)
+ {
+ ByteString tmp = null;
+ do
{
- int length = (int)(ReadRawVarint32() & int.MaxValue);
- int limit = PushLimit(length);
- //while (!ReachedLimit)
- //{
- // Object value = null;
- // if (ReadPrimitiveField(fieldType, ref value))
- // list.Add((T)value);
- //}
- if (!ReachedLimit)
- ReadPrimitiveArrayItems(fieldType, fieldTag, list, true);
+ ReadBytes(ref tmp);
+ list.Add(tmp);
+ }
+ while (ContinueArray(fieldTag, false, 0));
+ }
- PopLimit(limit);
+ [CLSCompliant(false)]
+ public void ReadBoolArray(uint fieldTag, string fieldName, ICollection<bool> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ bool tmp = false;
+ do
+ {
+ ReadBool(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
}
- else
+ }
+
+ [CLSCompliant(false)]
+ public void ReadInt32Array(uint fieldTag, string fieldName, ICollection<int> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
{
- ReadPrimitiveArrayItems(fieldType, fieldTag, list, false);
- //Object value = null;
- //do
- //{
- // if (ReadPrimitiveField(fieldType, ref value))
- // list.Add((T)value);
- //}
- //while (ContinueArray(fieldTag, false));
+ int tmp = 0;
+ do
+ {
+ ReadInt32(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
}
}
- void ReadPrimitiveArrayItems<T>(FieldType fieldType, uint fieldTag, ICollection<T> list, bool packed)
+ [CLSCompliant(false)]
+ public void ReadSInt32Array(uint fieldTag, string fieldName, ICollection<int> list)
{
- switch (fieldType)
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
{
- case FieldType.Double:
- {
- ICollection<double> output = (ICollection<double>)list;
- double tmp = 0;
- do
- {
- ReadDouble(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.Float:
- {
- ICollection<float> output = (ICollection<float>)list;
- float tmp = 0;
- do
- {
- ReadFloat(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.Int64:
- {
- ICollection<long> output = (ICollection<long>)list;
- long tmp = 0;
- do
- {
- ReadInt64(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.UInt64:
- {
- ICollection<ulong> output = (ICollection<ulong>)list;
- ulong tmp = 0;
- do
- {
- ReadUInt64(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.Int32:
- {
- ICollection<int> output = (ICollection<int>)list;
- int tmp = 0;
- do
- {
- ReadInt32(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.Fixed64:
- {
- ICollection<ulong> output = (ICollection<ulong>)list;
- ulong tmp = 0;
- do
- {
- ReadFixed64(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.Fixed32:
- {
- ICollection<uint> output = (ICollection<uint>)list;
- uint tmp = 0;
- do
- {
- ReadFixed32(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.Bool:
- {
- ICollection<bool> output = (ICollection<bool>)list;
- bool tmp = false;
- do
- {
- ReadBool(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.String:
- {
- ICollection<string> output = (ICollection<string>)list;
- string tmp = null;
- do
- {
- ReadString(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.Bytes:
- {
- ICollection<ByteString> output = (ICollection<ByteString>)list;
- ByteString tmp = null;
- do
- {
- ReadBytes(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.UInt32:
- {
- ICollection<uint> output = (ICollection<uint>)list;
- uint tmp = 0;
- do
- {
- ReadUInt32(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.SFixed32:
- {
- ICollection<int> output = (ICollection<int>)list;
- int tmp = 0;
- do
- {
- ReadSFixed32(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.SFixed64:
- {
- ICollection<long> output = (ICollection<long>)list;
- long tmp = 0;
- do
- {
- ReadSFixed64(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.SInt32:
- {
- ICollection<int> output = (ICollection<int>)list;
- int tmp = 0;
- do
- {
- ReadSInt32(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.SInt64:
- {
- ICollection<long> output = (ICollection<long>)list;
- long tmp = 0;
- do
- {
- ReadSInt64(ref tmp);
- output.Add(tmp);
- }
- while (ContinueArray(fieldTag, packed));
- }
- break;
- case FieldType.Group:
- throw new ArgumentException("ReadPrimitiveField() cannot handle nested groups.");
- case FieldType.Message:
- throw new ArgumentException("ReadPrimitiveField() cannot handle embedded messages.");
- // We don't handle enums because we don't know what to do if the
- // value is not recognized.
- case FieldType.Enum:
- throw new ArgumentException("ReadPrimitiveField() cannot handle enums.");
- default:
- throw new ArgumentOutOfRangeException("Invalid field type " + fieldType);
+ int tmp = 0;
+ do
+ {
+ ReadSInt32(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
+ }
+ }
+
+ [CLSCompliant(false)]
+ public void ReadUInt32Array(uint fieldTag, string fieldName, ICollection<uint> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ uint tmp = 0;
+ do
+ {
+ ReadUInt32(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
+ }
+ }
+
+ [CLSCompliant(false)]
+ public void ReadFixed32Array(uint fieldTag, string fieldName, ICollection<uint> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ uint tmp = 0;
+ do
+ {
+ ReadFixed32(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
+ }
+ }
+
+ [CLSCompliant(false)]
+ public void ReadSFixed32Array(uint fieldTag, string fieldName, ICollection<int> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ int tmp = 0;
+ do
+ {
+ ReadSFixed32(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
+ }
+ }
+
+ [CLSCompliant(false)]
+ public void ReadInt64Array(uint fieldTag, string fieldName, ICollection<long> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ long tmp = 0;
+ do
+ {
+ ReadInt64(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
+ }
+ }
+
+ [CLSCompliant(false)]
+ public void ReadSInt64Array(uint fieldTag, string fieldName, ICollection<long> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ long tmp = 0;
+ do
+ {
+ ReadSInt64(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
+ }
+ }
+
+ [CLSCompliant(false)]
+ public void ReadUInt64Array(uint fieldTag, string fieldName, ICollection<ulong> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ ulong tmp = 0;
+ do
+ {
+ ReadUInt64(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
+ }
+ }
+
+ [CLSCompliant(false)]
+ public void ReadFixed64Array(uint fieldTag, string fieldName, ICollection<ulong> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ ulong tmp = 0;
+ do
+ {
+ ReadFixed64(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
+ }
+ }
+
+ [CLSCompliant(false)]
+ public void ReadSFixed64Array(uint fieldTag, string fieldName, ICollection<long> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ long tmp = 0;
+ do
+ {
+ ReadSFixed64(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
+ }
+ }
+
+ [CLSCompliant(false)]
+ public void ReadDoubleArray(uint fieldTag, string fieldName, ICollection<double> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ double tmp = 0;
+ do
+ {
+ ReadDouble(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
+ }
+ }
+
+ [CLSCompliant(false)]
+ public void ReadFloatArray(uint fieldTag, string fieldName, ICollection<float> list)
+ {
+ bool isPacked;
+ int holdLimit;
+ if (BeginArray(fieldTag, out isPacked, out holdLimit))
+ {
+ float tmp = 0;
+ do
+ {
+ ReadFloat(ref tmp);
+ list.Add(tmp);
+ } while (ContinueArray(fieldTag, isPacked, holdLimit));
}
}
@@ -838,7 +862,7 @@ namespace Google.ProtocolBuffers
unknown.Add(unkval);
}
}
- while (ContinueArray(fieldTag, false));
+ while (ContinueArray(fieldTag, false, 0));
}
}
@@ -882,7 +906,7 @@ namespace Google.ProtocolBuffers
unknown.Add(unkval);
}
}
- while (ContinueArray(fieldTag, false));
+ while (ContinueArray(fieldTag, false, 0));
}
}
@@ -895,7 +919,7 @@ namespace Google.ProtocolBuffers
ReadMessage(builder, registry);
list.Add((T)builder.WeakBuildPartial());
}
- while (ContinueArray(fieldTag, false));
+ while (ContinueArray(fieldTag, false, 0));
}
[CLSCompliant(false)]
@@ -907,7 +931,7 @@ namespace Google.ProtocolBuffers
ReadGroup(WireFormat.GetTagFieldNumber(fieldTag), builder, registry);
list.Add((T)builder.WeakBuildPartial());
}
- while (ContinueArray(fieldTag, false));
+ while (ContinueArray(fieldTag, false, 0));
}
/// <summary>
diff --git a/src/ProtocolBuffers/CodedOutputStream.cs b/src/ProtocolBuffers/CodedOutputStream.cs
index 37355412..f16abf65 100644
--- a/src/ProtocolBuffers/CodedOutputStream.cs
+++ b/src/ProtocolBuffers/CodedOutputStream.cs
@@ -127,7 +127,71 @@ namespace Google.ProtocolBuffers
#endregion
- #region Writing of tags etc
+ #region Writing of tags and fields
+
+ public void WriteField(FieldType fieldType, int fieldNumber, string fieldName, object value)
+ {
+ switch (fieldType)
+ {
+ case FieldType.String:
+ WriteString(fieldNumber, fieldName, (string)value);
+ break;
+ case FieldType.Message:
+ WriteMessage(fieldNumber, fieldName, (IMessageLite)value);
+ break;
+ case FieldType.Group:
+ WriteGroup(fieldNumber, fieldName, (IMessageLite)value);
+ break;
+ case FieldType.Bytes:
+ WriteBytes(fieldNumber, fieldName, (ByteString)value);
+ break;
+ case FieldType.Bool:
+ WriteBool(fieldNumber, fieldName, (bool)value);
+ break;
+ case FieldType.Enum:
+ if (value is System.Enum)
+ WriteEnum(fieldNumber, fieldName, (int)value, null/*not used*/);
+ else
+ WriteEnum(fieldNumber, fieldName, ((IEnumLite)value).Number, null/*not used*/);
+ break;
+ case FieldType.Int32:
+ WriteInt32(fieldNumber, fieldName, (int)value);
+ break;
+ case FieldType.Int64:
+ WriteInt64(fieldNumber, fieldName, (long)value);
+ break;
+ case FieldType.UInt32:
+ WriteUInt32(fieldNumber, fieldName, (uint)value);
+ break;
+ case FieldType.UInt64:
+ WriteUInt64(fieldNumber, fieldName, (ulong)value);
+ break;
+ case FieldType.SInt32:
+ WriteSInt32(fieldNumber, fieldName, (int)value);
+ break;
+ case FieldType.SInt64:
+ WriteSInt64(fieldNumber, fieldName, (long)value);
+ break;
+ case FieldType.Fixed32:
+ WriteFixed32(fieldNumber, fieldName, (uint)value);
+ break;
+ case FieldType.Fixed64:
+ WriteFixed64(fieldNumber, fieldName, (ulong)value);
+ break;
+ case FieldType.SFixed32:
+ WriteSFixed32(fieldNumber, fieldName, (int)value);
+ break;
+ case FieldType.SFixed64:
+ WriteSFixed64(fieldNumber, fieldName, (long)value);
+ break;
+ case FieldType.Double:
+ WriteDouble(fieldNumber, fieldName, (double)value);
+ break;
+ case FieldType.Float:
+ WriteFloat(fieldNumber, fieldName, (float)value);
+ break;
+ }
+ }
/// <summary>
/// Writes a double field value, including tag, to the stream.
@@ -318,266 +382,10 @@ namespace Google.ProtocolBuffers
WriteBytes(WireFormat.MessageSetField.Message, "message", value);
WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.EndGroup);
}
-
- public void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list)
- {
- foreach (object element in list)
- WriteField(fieldType, fieldNumber, fieldName, element);
- }
-
- public void WriteArray<T>(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.Generic.IEnumerable<T> list)
- {
- switch (fieldType)
- {
- case FieldType.String:
- foreach (string value in ((IEnumerable<string>)list))
- WriteString(fieldNumber, fieldName, value);
- break;
- case FieldType.Message:
- foreach (T value in list)
- WriteMessage(fieldNumber, fieldName, (IMessageLite)value);
- break;
- case FieldType.Group:
- foreach (T value in list)
- WriteGroup(fieldNumber, fieldName, (IMessageLite)value);
- break;
- case FieldType.Bytes:
- foreach (ByteString value in ((IEnumerable<ByteString>)list))
- WriteBytes(fieldNumber, fieldName, value);
- break;
- case FieldType.Bool:
- foreach (bool value in ((IEnumerable<bool>)list))
- WriteBool(fieldNumber, fieldName, value);
- break;
- case FieldType.Enum:
- if (default(T) is System.Enum)
- {
- foreach (int value in ((ICastArray)list).CastArray<int>())
- WriteEnum(fieldNumber, fieldName, value, null/*not used*/);
- }
- else
- {
- foreach (T value in list)
- WriteEnum(fieldNumber, fieldName, ((IEnumLite)value).Number, null/*not used*/);
- }
- break;
- case FieldType.Int32:
- foreach (int value in ((IEnumerable<int>)list))
- WriteInt32(fieldNumber, fieldName, value);
- break;
- case FieldType.Int64:
- foreach (long value in ((IEnumerable<long>)list))
- WriteInt64(fieldNumber, fieldName, value);
- break;
- case FieldType.UInt32:
- foreach (uint value in ((IEnumerable<uint>)list))
- WriteUInt32(fieldNumber, fieldName, value);
- break;
- case FieldType.UInt64:
- foreach (ulong value in ((IEnumerable<ulong>)list))
- WriteUInt64(fieldNumber, fieldName, value);
- break;
- case FieldType.SInt32:
- foreach (int value in ((IEnumerable<int>)list))
- WriteSInt32(fieldNumber, fieldName, value);
- break;
- case FieldType.SInt64:
- foreach (long value in ((IEnumerable<long>)list))
- WriteSInt64(fieldNumber, fieldName, value);
- break;
- case FieldType.Fixed32:
- foreach (uint value in ((IEnumerable<uint>)list))
- WriteFixed32(fieldNumber, fieldName, value);
- break;
- case FieldType.Fixed64:
- foreach (ulong value in ((IEnumerable<ulong>)list))
- WriteFixed64(fieldNumber, fieldName, value);
- break;
- case FieldType.SFixed32:
- foreach (int value in ((IEnumerable<int>)list))
- WriteSFixed32(fieldNumber, fieldName, value);
- break;
- case FieldType.SFixed64:
- foreach (long value in ((IEnumerable<long>)list))
- WriteSFixed64(fieldNumber, fieldName, value);
- break;
- case FieldType.Double:
- foreach (double value in ((IEnumerable<double>)list))
- WriteDouble(fieldNumber, fieldName, value);
- break;
- case FieldType.Float:
- foreach (float value in ((IEnumerable<float>)list))
- WriteFloat(fieldNumber, fieldName, value);
- break;
- }
- }
- public void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list)
- {
- int calculatedSize = 0;
- foreach (object element in list)
- calculatedSize += CodedOutputStream.ComputeFieldSizeNoTag(fieldType, element);
-
- WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
- WriteRawVarint32((uint)calculatedSize);
-
- foreach (object element in list)
- WriteFieldNoTag(fieldType, element);
- }
-
- public void WritePackedArray<T>(FieldType fieldType, int fieldNumber, string fieldName, int calculatedSize, System.Collections.Generic.IEnumerable<T> list)
- {
- WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
- WriteRawVarint32((uint)calculatedSize);
-
- switch (fieldType)
- {
- case FieldType.String:
- foreach (string value in ((IEnumerable<string>)list))
- WriteStringNoTag(value);
- break;
- case FieldType.Message:
- foreach (T value in list)
- WriteMessageNoTag((IMessageLite)value);
- break;
- case FieldType.Group:
- foreach (T value in list)
- WriteGroupNoTag((IMessageLite)value);
- break;
- case FieldType.Bytes:
- foreach (ByteString value in ((IEnumerable<ByteString>)list))
- WriteBytesNoTag(value);
- break;
- case FieldType.Bool:
- foreach (bool value in ((IEnumerable<bool>)list))
- WriteBoolNoTag(value);
- break;
- case FieldType.Enum:
- if (default(T) is System.Enum)
- {
- foreach (int value in ((ICastArray)list).CastArray<int>())
- WriteEnumNoTag(value);
- }
- else
- {
- foreach (T value in list)
- WriteEnumNoTag(((IEnumLite)value).Number);
- }
- break;
- case FieldType.Int32:
- foreach (int value in ((IEnumerable<int>)list))
- WriteInt32NoTag(value);
- break;
- case FieldType.Int64:
- foreach (long value in ((IEnumerable<long>)list))
- WriteInt64NoTag(value);
- break;
- case FieldType.UInt32:
- foreach (uint value in ((IEnumerable<uint>)list))
- WriteUInt32NoTag(value);
- break;
- case FieldType.UInt64:
- foreach (ulong value in ((IEnumerable<ulong>)list))
- WriteUInt64NoTag(value);
- break;
- case FieldType.SInt32:
- foreach (int value in ((IEnumerable<int>)list))
- WriteSInt32NoTag(value);
- break;
- case FieldType.SInt64:
- foreach (long value in ((IEnumerable<long>)list))
- WriteSInt64NoTag(value);
- break;
- case FieldType.Fixed32:
- foreach (uint value in ((IEnumerable<uint>)list))
- WriteFixed32NoTag(value);
- break;
- case FieldType.Fixed64:
- foreach (ulong value in ((IEnumerable<ulong>)list))
- WriteFixed64NoTag(value);
- break;
- case FieldType.SFixed32:
- foreach (int value in ((IEnumerable<int>)list))
- WriteSFixed32NoTag(value);
- break;
- case FieldType.SFixed64:
- foreach (long value in ((IEnumerable<long>)list))
- WriteSFixed64NoTag(value);
- break;
- case FieldType.Double:
- foreach (double value in ((IEnumerable<double>)list))
- WriteDoubleNoTag(value);
- break;
- case FieldType.Float:
- foreach (float value in ((IEnumerable<float>)list))
- WriteFloatNoTag(value);
- break;
- }
- }
+ #endregion
- public void WriteField(FieldType fieldType, int fieldNumber, string fieldName, object value)
- {
- switch (fieldType)
- {
- case FieldType.String:
- WriteString(fieldNumber, fieldName, (string)value);
- break;
- case FieldType.Message:
- WriteMessage(fieldNumber, fieldName, (IMessageLite)value);
- break;
- case FieldType.Group:
- WriteGroup(fieldNumber, fieldName, (IMessageLite)value);
- break;
- case FieldType.Bytes:
- WriteBytes(fieldNumber, fieldName, (ByteString)value);
- break;
- case FieldType.Bool:
- WriteBool(fieldNumber, fieldName, (bool)value);
- break;
- case FieldType.Enum:
- if (value is System.Enum)
- WriteEnum(fieldNumber, fieldName, (int)value, null/*not used*/);
- else
- WriteEnum(fieldNumber, fieldName, ((IEnumLite)value).Number, null/*not used*/);
- break;
- case FieldType.Int32:
- WriteInt32(fieldNumber, fieldName, (int) value);
- break;
- case FieldType.Int64:
- WriteInt64(fieldNumber, fieldName, (long) value);
- break;
- case FieldType.UInt32:
- WriteUInt32(fieldNumber, fieldName, (uint) value);
- break;
- case FieldType.UInt64:
- WriteUInt64(fieldNumber, fieldName, (ulong) value);
- break;
- case FieldType.SInt32:
- WriteSInt32(fieldNumber, fieldName, (int)value);
- break;
- case FieldType.SInt64:
- WriteSInt64(fieldNumber, fieldName, (long)value);
- break;
- case FieldType.Fixed32:
- WriteFixed32(fieldNumber, fieldName, (uint) value);
- break;
- case FieldType.Fixed64:
- WriteFixed64(fieldNumber, fieldName, (ulong) value);
- break;
- case FieldType.SFixed32:
- WriteSFixed32(fieldNumber, fieldName, (int) value);
- break;
- case FieldType.SFixed64:
- WriteSFixed64(fieldNumber, fieldName, (long) value);
- break;
- case FieldType.Double:
- WriteDouble(fieldNumber, fieldName, (double)value);
- break;
- case FieldType.Float:
- WriteFloat(fieldNumber, fieldName, (float)value);
- break;
- }
- }
+ #region Writing of values without tags
public void WriteFieldNoTag(FieldType fieldType, object value)
{
@@ -605,34 +413,34 @@ namespace Google.ProtocolBuffers
WriteEnumNoTag(((IEnumLite)value).Number);
break;
case FieldType.Int32:
- WriteInt32NoTag((int) value);
+ WriteInt32NoTag((int)value);
break;
case FieldType.Int64:
- WriteInt64NoTag((long) value);
+ WriteInt64NoTag((long)value);
break;
case FieldType.UInt32:
- WriteUInt32NoTag((uint) value);
+ WriteUInt32NoTag((uint)value);
break;
case FieldType.UInt64:
- WriteUInt64NoTag((ulong) value);
+ WriteUInt64NoTag((ulong)value);
break;
case FieldType.SInt32:
- WriteSInt32NoTag((int) value);
+ WriteSInt32NoTag((int)value);
break;
case FieldType.SInt64:
- WriteSInt64NoTag((long) value);
+ WriteSInt64NoTag((long)value);
break;
case FieldType.Fixed32:
- WriteFixed32NoTag((uint) value);
+ WriteFixed32NoTag((uint)value);
break;
case FieldType.Fixed64:
- WriteFixed64NoTag((ulong) value);
+ WriteFixed64NoTag((ulong)value);
break;
case FieldType.SFixed32:
- WriteSFixed32NoTag((int) value);
+ WriteSFixed32NoTag((int)value);
break;
case FieldType.SFixed64:
- WriteSFixed64NoTag((long) value);
+ WriteSFixed64NoTag((long)value);
break;
case FieldType.Double:
WriteDoubleNoTag((double)value);
@@ -643,10 +451,6 @@ namespace Google.ProtocolBuffers
}
}
- #endregion
-
- #region Writing of values without tags
-
/// <summary>
/// Writes a double field value, including tag, to the stream.
/// </summary>
@@ -709,7 +513,7 @@ namespace Google.ProtocolBuffers
/// </summary>
public void WriteInt64NoTag(long value)
{
- WriteRawVarint64((ulong) value);
+ WriteRawVarint64((ulong)value);
}
/// <summary>
@@ -719,12 +523,12 @@ namespace Google.ProtocolBuffers
{
if (value >= 0)
{
- WriteRawVarint32((uint) value);
+ WriteRawVarint32((uint)value);
}
else
{
// Must sign-extend.
- WriteRawVarint64((ulong) value);
+ WriteRawVarint64((ulong)value);
}
}
@@ -751,7 +555,7 @@ namespace Google.ProtocolBuffers
/// </summary>
public void WriteBoolNoTag(bool value)
{
- WriteRawByte(value ? (byte) 1 : (byte) 0);
+ WriteRawByte(value ? (byte)1 : (byte)0);
}
/// <summary>
@@ -762,7 +566,7 @@ namespace Google.ProtocolBuffers
// Optimise the case where we have enough space to write
// the string directly to the buffer, which should be common.
int length = Encoding.UTF8.GetByteCount(value);
- WriteRawVarint32((uint) length);
+ WriteRawVarint32((uint)length);
if (limit - position >= length)
{
Encoding.UTF8.GetBytes(value, 0, value.Length, buffer, position);
@@ -785,7 +589,7 @@ namespace Google.ProtocolBuffers
public void WriteMessageNoTag(IMessageLite value)
{
- WriteRawVarint32((uint) value.SerializedSize);
+ WriteRawVarint32((uint)value.SerializedSize);
value.WriteTo(this);
}
@@ -803,17 +607,17 @@ namespace Google.ProtocolBuffers
public void WriteEnumNoTag(int value)
{
- WriteRawVarint32((uint) value);
+ WriteRawVarint32((uint)value);
}
public void WriteSFixed32NoTag(int value)
{
- WriteRawLittleEndian32((uint) value);
+ WriteRawLittleEndian32((uint)value);
}
public void WriteSFixed64NoTag(long value)
{
- WriteRawLittleEndian64((ulong) value);
+ WriteRawLittleEndian64((ulong)value);
}
public void WriteSInt32NoTag(int value)
@@ -828,6 +632,309 @@ namespace Google.ProtocolBuffers
#endregion
+ #region Write array members
+
+ public void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list)
+ {
+ foreach (object element in list)
+ WriteField(fieldType, fieldNumber, fieldName, element);
+ }
+
+ public void WriteGroupArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)
+ where T : IMessageLite
+ {
+ foreach (IMessageLite value in list)
+ WriteGroup(fieldNumber, fieldName, value);
+ }
+
+ public void WriteMessageArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)
+ where T : IMessageLite
+ {
+ foreach (IMessageLite value in list)
+ WriteMessage(fieldNumber, fieldName, value);
+ }
+
+ public void WriteStringArray(int fieldNumber, string fieldName, IEnumerable<string> list)
+ {
+ foreach (var value in list)
+ WriteString(fieldNumber, fieldName, value);
+ }
+
+ public void WriteBytesArray(int fieldNumber, string fieldName, IEnumerable<ByteString> list)
+ {
+ foreach (var value in list)
+ WriteBytes(fieldNumber, fieldName, value);
+ }
+
+ public void WriteBoolArray(int fieldNumber, string fieldName, IEnumerable<bool> list)
+ {
+ foreach (var value in list)
+ WriteBool(fieldNumber, fieldName, value);
+ }
+
+ public void WriteInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list)
+ {
+ foreach (var value in list)
+ WriteInt32(fieldNumber, fieldName, value);
+ }
+
+ public void WriteSInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list)
+ {
+ foreach (var value in list)
+ WriteSInt32(fieldNumber, fieldName, value);
+ }
+
+ public void WriteUInt32Array(int fieldNumber, string fieldName, IEnumerable<uint> list)
+ {
+ foreach (var value in list)
+ WriteUInt32(fieldNumber, fieldName, value);
+ }
+
+ public void WriteFixed32Array(int fieldNumber, string fieldName, IEnumerable<uint> list)
+ {
+ foreach (var value in list)
+ WriteFixed32(fieldNumber, fieldName, value);
+ }
+
+ public void WriteSFixed32Array(int fieldNumber, string fieldName, IEnumerable<int> list)
+ {
+ foreach (var value in list)
+ WriteSFixed32(fieldNumber, fieldName, value);
+ }
+
+ public void WriteInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list)
+ {
+ foreach (var value in list)
+ WriteInt64(fieldNumber, fieldName, value);
+ }
+
+ public void WriteSInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list)
+ {
+ foreach (var value in list)
+ WriteSInt64(fieldNumber, fieldName, value);
+ }
+
+ public void WriteUInt64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list)
+ {
+ foreach (var value in list)
+ WriteUInt64(fieldNumber, fieldName, value);
+ }
+
+ public void WriteFixed64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list)
+ {
+ foreach (var value in list)
+ WriteFixed64(fieldNumber, fieldName, value);
+ }
+
+ public void WriteSFixed64Array(int fieldNumber, string fieldName, IEnumerable<long> list)
+ {
+ foreach (var value in list)
+ WriteSFixed64(fieldNumber, fieldName, value);
+ }
+
+ public void WriteDoubleArray(int fieldNumber, string fieldName, IEnumerable<double> list)
+ {
+ foreach (var value in list)
+ WriteDouble(fieldNumber, fieldName, value);
+ }
+
+ public void WriteFloatArray(int fieldNumber, string fieldName, IEnumerable<float> list)
+ {
+ foreach (var value in list)
+ WriteFloat(fieldNumber, fieldName, value);
+ }
+
+ [CLSCompliant(false)]
+ public void WriteEnumArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)
+ where T : struct, IComparable, IFormattable, IConvertible
+ {
+ if (list is ICastArray)
+ {
+ foreach (int value in ((ICastArray)list).CastArray<int>())
+ WriteEnum(fieldNumber, fieldName, value, null /*unused*/);
+ }
+ else
+ {
+ foreach (object value in list)
+ WriteEnum(fieldNumber, fieldName, (int) value, null /*unused*/);
+ }
+ }
+
+ #endregion
+
+ #region Write packed array members
+
+ public void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list)
+ {
+ int calculatedSize = 0;
+ foreach (object element in list)
+ calculatedSize += CodedOutputStream.ComputeFieldSizeNoTag(fieldType, element);
+
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+
+ foreach (object element in list)
+ WriteFieldNoTag(fieldType, element);
+ }
+
+ public void WritePackedGroupArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)
+ where T : IMessageLite
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (IMessageLite value in list)
+ WriteGroupNoTag(value);
+ }
+
+ public void WritePackedMessageArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)
+ where T : IMessageLite
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (IMessageLite value in list)
+ WriteMessageNoTag(value);
+ }
+
+ public void WritePackedStringArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<string> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteStringNoTag(value);
+ }
+
+ public void WritePackedBytesArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<ByteString> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteBytesNoTag(value);
+ }
+
+ public void WritePackedBoolArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<bool> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteBoolNoTag(value);
+ }
+
+ public void WritePackedInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteInt32NoTag(value);
+ }
+
+ public void WritePackedSInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteSInt32NoTag(value);
+ }
+
+ public void WritePackedUInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<uint> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteUInt32NoTag(value);
+ }
+
+ public void WritePackedFixed32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<uint> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteFixed32NoTag(value);
+ }
+
+ public void WritePackedSFixed32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteSFixed32NoTag(value);
+ }
+
+ public void WritePackedInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteInt64NoTag(value);
+ }
+
+ public void WritePackedSInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteSInt64NoTag(value);
+ }
+
+ public void WritePackedUInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<ulong> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteUInt64NoTag(value);
+ }
+
+ public void WritePackedFixed64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<ulong> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteFixed64NoTag(value);
+ }
+
+ public void WritePackedSFixed64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteSFixed64NoTag(value);
+ }
+
+ public void WritePackedDoubleArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<double> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteDoubleNoTag(value);
+ }
+
+ public void WritePackedFloatArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<float> list)
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ foreach (var value in list)
+ WriteFloatNoTag(value);
+ }
+
+ [CLSCompliant(false)]
+ public void WritePackedEnumArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)
+ where T : struct, IComparable, IFormattable, IConvertible
+ {
+ WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+ WriteRawVarint32((uint)calculatedSize);
+ if (list is ICastArray)
+ {
+ foreach (int value in ((ICastArray)list).CastArray<int>())
+ WriteEnumNoTag(value);
+ }
+ else
+ {
+ foreach (object value in list)
+ WriteEnumNoTag((int)value);
+ }
+ }
+
+ #endregion
+
#region Underlying writing primitives
/// <summary>
diff --git a/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs b/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
index ee6ac94c..5dd88adf 100644
--- a/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
+++ b/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
@@ -279,7 +279,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
int size = SerializedSize;
string[] field_names = _fileDescriptorSetFieldNames;
if (file_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 1, field_names[0], file_);
+ output.WriteMessageArray(1, field_names[0], file_);
}
UnknownFields.WriteTo(output);
}
@@ -640,19 +640,19 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
output.WriteString(2, field_names[6], Package);
}
if (dependency_.Count > 0) {
- output.WriteArray(pbd::FieldType.String, 3, field_names[0], dependency_);
+ output.WriteStringArray(3, field_names[0], dependency_);
}
if (messageType_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 4, field_names[3], messageType_);
+ output.WriteMessageArray(4, field_names[3], messageType_);
}
if (enumType_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 5, field_names[1], enumType_);
+ output.WriteMessageArray(5, field_names[1], enumType_);
}
if (service_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 6, field_names[7], service_);
+ output.WriteMessageArray(6, field_names[7], service_);
}
if (extension_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 7, field_names[2], extension_);
+ output.WriteMessageArray(7, field_names[2], extension_);
}
if (hasOptions) {
output.WriteMessage(8, field_names[5], Options);
@@ -871,7 +871,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
break;
}
case 26: {
- input.ReadPrimitiveArray(pbd::FieldType.String, tag, field_name, result.dependency_);
+ input.ReadStringArray(tag, field_name, result.dependency_);
break;
}
case 34: {
@@ -1591,19 +1591,19 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
output.WriteString(1, field_names[4], Name);
}
if (field_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 2, field_names[3], field_);
+ output.WriteMessageArray(2, field_names[3], field_);
}
if (nestedType_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 3, field_names[5], nestedType_);
+ output.WriteMessageArray(3, field_names[5], nestedType_);
}
if (enumType_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 4, field_names[0], enumType_);
+ output.WriteMessageArray(4, field_names[0], enumType_);
}
if (extensionRange_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 5, field_names[2], extensionRange_);
+ output.WriteMessageArray(5, field_names[2], extensionRange_);
}
if (extension_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 6, field_names[1], extension_);
+ output.WriteMessageArray(6, field_names[1], extension_);
}
if (hasOptions) {
output.WriteMessage(7, field_names[6], Options);
@@ -2784,7 +2784,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
output.WriteString(1, field_names[0], Name);
}
if (value_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 2, field_names[2], value_);
+ output.WriteMessageArray(2, field_names[2], value_);
}
if (hasOptions) {
output.WriteMessage(3, field_names[1], Options);
@@ -3506,7 +3506,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
output.WriteString(1, field_names[1], Name);
}
if (method_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 2, field_names[0], method_);
+ output.WriteMessageArray(2, field_names[0], method_);
}
if (hasOptions) {
output.WriteMessage(3, field_names[2], Options);
@@ -4354,7 +4354,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
output.WriteBool(18, field_names[6], PyGenericServices);
}
if (uninterpretedOption_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 999, field_names[7], uninterpretedOption_);
+ output.WriteMessageArray(999, field_names[7], uninterpretedOption_);
}
extensionWriter.WriteUntil(536870912, output);
UnknownFields.WriteTo(output);
@@ -4856,7 +4856,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
output.WriteBool(2, field_names[1], NoStandardDescriptorAccessor);
}
if (uninterpretedOption_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 999, field_names[2], uninterpretedOption_);
+ output.WriteMessageArray(999, field_names[2], uninterpretedOption_);
}
extensionWriter.WriteUntil(536870912, output);
UnknownFields.WriteTo(output);
@@ -5250,7 +5250,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
output.WriteString(9, field_names[2], ExperimentalMapKey);
}
if (uninterpretedOption_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 999, field_names[4], uninterpretedOption_);
+ output.WriteMessageArray(999, field_names[4], uninterpretedOption_);
}
extensionWriter.WriteUntil(536870912, output);
UnknownFields.WriteTo(output);
@@ -5641,7 +5641,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
string[] field_names = _enumOptionsFieldNames;
pb::ExtendableMessage<EnumOptions, EnumOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
if (uninterpretedOption_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 999, field_names[0], uninterpretedOption_);
+ output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
}
extensionWriter.WriteUntil(536870912, output);
UnknownFields.WriteTo(output);
@@ -5911,7 +5911,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
string[] field_names = _enumValueOptionsFieldNames;
pb::ExtendableMessage<EnumValueOptions, EnumValueOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
if (uninterpretedOption_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 999, field_names[0], uninterpretedOption_);
+ output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
}
extensionWriter.WriteUntil(536870912, output);
UnknownFields.WriteTo(output);
@@ -6181,7 +6181,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
string[] field_names = _serviceOptionsFieldNames;
pb::ExtendableMessage<ServiceOptions, ServiceOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
if (uninterpretedOption_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 999, field_names[0], uninterpretedOption_);
+ output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
}
extensionWriter.WriteUntil(536870912, output);
UnknownFields.WriteTo(output);
@@ -6451,7 +6451,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
string[] field_names = _methodOptionsFieldNames;
pb::ExtendableMessage<MethodOptions, MethodOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
if (uninterpretedOption_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 999, field_names[0], uninterpretedOption_);
+ output.WriteMessageArray(999, field_names[0], uninterpretedOption_);
}
extensionWriter.WriteUntil(536870912, output);
UnknownFields.WriteTo(output);
@@ -7061,7 +7061,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
int size = SerializedSize;
string[] field_names = _uninterpretedOptionFieldNames;
if (name_.Count > 0) {
- output.WriteArray(pbd::FieldType.Message, 2, field_names[2], name_);
+ output.WriteMessageArray(2, field_names[2], name_);
}
if (hasIdentifierValue) {
output.WriteString(3, field_names[1], IdentifierValue);
diff --git a/src/ProtocolBuffers/ICodedInputStream.cs b/src/ProtocolBuffers/ICodedInputStream.cs
index f4c66227..5a9df872 100644
--- a/src/ProtocolBuffers/ICodedInputStream.cs
+++ b/src/ProtocolBuffers/ICodedInputStream.cs
@@ -147,13 +147,6 @@ namespace Google.ProtocolBuffers
void ReadPrimitiveArray(FieldType fieldType, uint fieldTag, string fieldName, ICollection<object> list);
/// <summary>
- /// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed and the
- /// type is numberic, it will read a packed array.
- /// </summary>
- [CLSCompliant(false)]
- void ReadPrimitiveArray<T>(FieldType fieldType, uint fieldTag, string fieldName, ICollection<T> list);
-
- /// <summary>
/// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed, it will
/// read a packed array.
/// </summary>
@@ -201,5 +194,50 @@ namespace Google.ProtocolBuffers
/// nothing is skipped. Otherwise, returns true.</returns>
[CLSCompliant(false)]
bool SkipField();
+
+ [CLSCompliant(false)]
+ void ReadStringArray(uint fieldTag, string fieldName, ICollection<string> list);
+
+ [CLSCompliant(false)]
+ void ReadBytesArray(uint fieldTag, string fieldName, ICollection<ByteString> list);
+
+ [CLSCompliant(false)]
+ void ReadBoolArray(uint fieldTag, string fieldName, ICollection<bool> list);
+
+ [CLSCompliant(false)]
+ void ReadInt32Array(uint fieldTag, string fieldName, ICollection<int> list);
+
+ [CLSCompliant(false)]
+ void ReadSInt32Array(uint fieldTag, string fieldName, ICollection<int> list);
+
+ [CLSCompliant(false)]
+ void ReadUInt32Array(uint fieldTag, string fieldName, ICollection<uint> list);
+
+ [CLSCompliant(false)]
+ void ReadFixed32Array(uint fieldTag, string fieldName, ICollection<uint> list);
+
+ [CLSCompliant(false)]
+ void ReadSFixed32Array(uint fieldTag, string fieldName, ICollection<int> list);
+
+ [CLSCompliant(false)]
+ void ReadInt64Array(uint fieldTag, string fieldName, ICollection<long> list);
+
+ [CLSCompliant(false)]
+ void ReadSInt64Array(uint fieldTag, string fieldName, ICollection<long> list);
+
+ [CLSCompliant(false)]
+ void ReadUInt64Array(uint fieldTag, string fieldName, ICollection<ulong> list);
+
+ [CLSCompliant(false)]
+ void ReadFixed64Array(uint fieldTag, string fieldName, ICollection<ulong> list);
+
+ [CLSCompliant(false)]
+ void ReadSFixed64Array(uint fieldTag, string fieldName, ICollection<long> list);
+
+ [CLSCompliant(false)]
+ void ReadDoubleArray(uint fieldTag, string fieldName, ICollection<double> list);
+
+ [CLSCompliant(false)]
+ void ReadFloatArray(uint fieldTag, string fieldName, ICollection<float> list);
}
} \ No newline at end of file
diff --git a/src/ProtocolBuffers/ICodedOutputStream.cs b/src/ProtocolBuffers/ICodedOutputStream.cs
index 6408d98c..56ee5b61 100644
--- a/src/ProtocolBuffers/ICodedOutputStream.cs
+++ b/src/ProtocolBuffers/ICodedOutputStream.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using Google.ProtocolBuffers.Descriptors;
//Disable warning CS3010: CLS-compliant interfaces must have only CLS-compliant members
@@ -8,6 +9,15 @@ namespace Google.ProtocolBuffers
{
public interface ICodedOutputStream
{
+ void Flush();
+
+ [Obsolete]
+ void WriteUnknownGroup(int fieldNumber, string fieldName, IMessageLite value);
+ void WriteMessageSetExtension(int fieldNumber, string fieldName, IMessageLite value);
+ void WriteMessageSetExtension(int fieldNumber, string fieldName, ByteString value);
+
+ void WriteField(FieldType fieldType, int fieldNumber, string fieldName, object value);
+
/// <summary>
/// Writes a double field value, including tag, to the stream.
/// </summary>
@@ -61,27 +71,114 @@ namespace Google.ProtocolBuffers
/// </summary>
void WriteGroup(int fieldNumber, string fieldName, IMessageLite value);
- [Obsolete]
- void WriteUnknownGroup(int fieldNumber, string fieldName, IMessageLite value);
-
+ /// <summary>
+ /// Writes a message field value, including tag, to the stream.
+ /// </summary>
void WriteMessage(int fieldNumber, string fieldName, IMessageLite value);
+ /// <summary>
+ /// Writes a byte array field value, including tag, to the stream.
+ /// </summary>
void WriteBytes(int fieldNumber, string fieldName, ByteString value);
+ /// <summary>
+ /// Writes a UInt32 field value, including tag, to the stream.
+ /// </summary>
[CLSCompliant(false)]
void WriteUInt32(int fieldNumber, string fieldName, uint value);
+ /// <summary>
+ /// Writes an enum field value, including tag, to the stream.
+ /// </summary>
void WriteEnum(int fieldNumber, string fieldName, int value, object rawValue);
+ /// <summary>
+ /// Writes a fixed 32-bit field value, including tag, to the stream.
+ /// </summary>
void WriteSFixed32(int fieldNumber, string fieldName, int value);
+ /// <summary>
+ /// Writes a signed fixed 64-bit field value, including tag, to the stream.
+ /// </summary>
void WriteSFixed64(int fieldNumber, string fieldName, long value);
+ /// <summary>
+ /// Writes a signed 32-bit field value, including tag, to the stream.
+ /// </summary>
void WriteSInt32(int fieldNumber, string fieldName, int value);
+ /// <summary>
+ /// Writes a signed 64-bit field value, including tag, to the stream.
+ /// </summary>
void WriteSInt64(int fieldNumber, string fieldName, long value);
- void WriteMessageSetExtension(int fieldNumber, string fieldName, IMessageLite value);
- void WriteMessageSetExtension(int fieldNumber, string fieldName, ByteString value);
+
void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list);
+
+ void WriteGroupArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)
+ where T : IMessageLite;
+
+ void WriteMessageArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)
+ where T : IMessageLite;
+
+ void WriteStringArray(int fieldNumber, string fieldName, IEnumerable<string> list);
+
+ void WriteBytesArray(int fieldNumber, string fieldName, IEnumerable<ByteString> list);
+
+ void WriteBoolArray(int fieldNumber, string fieldName, IEnumerable<bool> list);
+
+ void WriteInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list);
+
+ void WriteSInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list);
+
+ void WriteUInt32Array(int fieldNumber, string fieldName, IEnumerable<uint> list);
+
+ void WriteFixed32Array(int fieldNumber, string fieldName, IEnumerable<uint> list);
+
+ void WriteSFixed32Array(int fieldNumber, string fieldName, IEnumerable<int> list);
+
+ void WriteInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list);
+
+ void WriteSInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list);
+
+ void WriteUInt64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list);
+
+ void WriteFixed64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list);
+
+ void WriteSFixed64Array(int fieldNumber, string fieldName, IEnumerable<long> list);
+
+ void WriteDoubleArray(int fieldNumber, string fieldName, IEnumerable<double> list);
+
+ void WriteFloatArray(int fieldNumber, string fieldName, IEnumerable<float> list);
+
+ [CLSCompliant(false)]
+ void WriteEnumArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)
+ where T : struct, IComparable, IFormattable, IConvertible;
+
void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list);
- void WriteArray<T>(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.Generic.IEnumerable<T> list);
- void WritePackedArray<T>(FieldType fieldType, int fieldNumber, string fieldName, int calculatedSize, System.Collections.Generic.IEnumerable<T> list);
- void WriteField(FieldType fieldType, int fieldNumber, string fieldName, object value);
- void Flush();
+
+ void WritePackedBoolArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<bool> list);
+
+ void WritePackedInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list);
+
+ void WritePackedSInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list);
+
+ void WritePackedUInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<uint> list);
+
+ void WritePackedFixed32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<uint> list);
+
+ void WritePackedSFixed32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list);
+
+ void WritePackedInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list);
+
+ void WritePackedSInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list);
+
+ void WritePackedUInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<ulong> list);
+
+ void WritePackedFixed64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<ulong> list);
+
+ void WritePackedSFixed64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list);
+
+ void WritePackedDoubleArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<double> list);
+
+ void WritePackedFloatArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<float> list);
+
+ [CLSCompliant(false)]
+ void WritePackedEnumArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)
+ where T : struct, IComparable, IFormattable, IConvertible;
}
} \ No newline at end of file