aboutsummaryrefslogtreecommitdiff
path: root/csharp/src
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2015-06-12 11:19:16 +0100
committerJon Skeet <skeet@pobox.com>2015-06-12 11:19:16 +0100
commit9b66768e257dd8e61895d8a2c40f078f9987b577 (patch)
tree13881eff7cc3c64533749e776e146051a866ebcd /csharp/src
parent43527448595b2e19a03747c494d1b33bced6086a (diff)
downloadprotobuf-9b66768e257dd8e61895d8a2c40f078f9987b577.tar.gz
protobuf-9b66768e257dd8e61895d8a2c40f078f9987b577.tar.bz2
protobuf-9b66768e257dd8e61895d8a2c40f078f9987b577.zip
Optimization to avoid foreach over empty lists.
Diffstat (limited to 'csharp/src')
-rw-r--r--csharp/src/ProtocolBuffers/CodedOutputStream.cs73
1 files changed, 64 insertions, 9 deletions
diff --git a/csharp/src/ProtocolBuffers/CodedOutputStream.cs b/csharp/src/ProtocolBuffers/CodedOutputStream.cs
index 132f8067..dfcaf8a2 100644
--- a/csharp/src/ProtocolBuffers/CodedOutputStream.cs
+++ b/csharp/src/ProtocolBuffers/CodedOutputStream.cs
@@ -543,19 +543,14 @@ namespace Google.Protobuf
#endregion
#region Write array members
- public void WriteGroupArray<T>(int fieldNumber, RepeatedField<T> list)
+ public void WriteMessageArray<T>(int fieldNumber, RepeatedField<T> list)
where T : IMessage
{
- foreach (IMessage value in list)
+ if (list.Count == 0)
{
- WriteGroup(fieldNumber, value);
+ return;
}
- }
-
- public void WriteMessageArray<T>(int fieldNumber, RepeatedField<T> list)
- where T : IMessage
- {
- foreach (IMessage value in list)
+ foreach (T value in list)
{
WriteMessage(fieldNumber, value);
}
@@ -563,6 +558,10 @@ namespace Google.Protobuf
public void WriteStringArray(int fieldNumber, RepeatedField<string> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteString(fieldNumber, value);
@@ -571,6 +570,10 @@ namespace Google.Protobuf
public void WriteBytesArray(int fieldNumber, RepeatedField<ByteString> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteBytes(fieldNumber, value);
@@ -579,6 +582,10 @@ namespace Google.Protobuf
public void WriteBoolArray(int fieldNumber, RepeatedField<bool> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteBool(fieldNumber, value);
@@ -587,6 +594,10 @@ namespace Google.Protobuf
public void WriteInt32Array(int fieldNumber, RepeatedField<int> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteInt32(fieldNumber, value);
@@ -595,6 +606,10 @@ namespace Google.Protobuf
public void WriteSInt32Array(int fieldNumber, RepeatedField<int> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteSInt32(fieldNumber, value);
@@ -603,6 +618,10 @@ namespace Google.Protobuf
public void WriteUInt32Array(int fieldNumber, RepeatedField<uint> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteUInt32(fieldNumber, value);
@@ -611,6 +630,10 @@ namespace Google.Protobuf
public void WriteFixed32Array(int fieldNumber, RepeatedField<uint> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteFixed32(fieldNumber, value);
@@ -619,6 +642,10 @@ namespace Google.Protobuf
public void WriteSFixed32Array(int fieldNumber, RepeatedField<int> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteSFixed32(fieldNumber, value);
@@ -627,6 +654,10 @@ namespace Google.Protobuf
public void WriteInt64Array(int fieldNumber, RepeatedField<long> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteInt64(fieldNumber, value);
@@ -635,6 +666,10 @@ namespace Google.Protobuf
public void WriteSInt64Array(int fieldNumber, RepeatedField<long> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteSInt64(fieldNumber, value);
@@ -643,6 +678,10 @@ namespace Google.Protobuf
public void WriteUInt64Array(int fieldNumber, RepeatedField<ulong> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteUInt64(fieldNumber, value);
@@ -651,6 +690,10 @@ namespace Google.Protobuf
public void WriteFixed64Array(int fieldNumber, RepeatedField<ulong> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteFixed64(fieldNumber, value);
@@ -659,6 +702,10 @@ namespace Google.Protobuf
public void WriteSFixed64Array(int fieldNumber, RepeatedField<long> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteSFixed64(fieldNumber, value);
@@ -667,6 +714,10 @@ namespace Google.Protobuf
public void WriteDoubleArray(int fieldNumber, RepeatedField<double> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteDouble(fieldNumber, value);
@@ -675,6 +726,10 @@ namespace Google.Protobuf
public void WriteFloatArray(int fieldNumber, RepeatedField<float> list)
{
+ if (list.Count == 0)
+ {
+ return;
+ }
foreach (var value in list)
{
WriteFloat(fieldNumber, value);