From cdb4518ae03ca02ee174deea1826252127ded3eb Mon Sep 17 00:00:00 2001 From: Jon Skeet Date: Sun, 7 Aug 2011 18:03:40 +0100 Subject: [PATCH] Overload of ContinueArray for situations where we know in advance that the array isn't packed. --- src/ProtocolBuffers/CodedInputStream.cs | 29 +++++++++++++++++++------ 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/ProtocolBuffers/CodedInputStream.cs b/src/ProtocolBuffers/CodedInputStream.cs index 09f698a11b..1e179509f8 100644 --- a/src/ProtocolBuffers/CodedInputStream.cs +++ b/src/ProtocolBuffers/CodedInputStream.cs @@ -530,6 +530,21 @@ namespace Google.ProtocolBuffers return true; } + private bool ContinueArray(uint currentTag) + { + string ignore; + uint next; + if (PeekNextTag(out next, out ignore)) + { + if (next == currentTag) + { + hasNextTag = false; + return true; + } + } + return false; + } + /// /// Returns true if the next tag is also part of the same unpacked array /// @@ -588,7 +603,7 @@ namespace Google.ProtocolBuffers { list.Add(value); } - } while (ContinueArray(fieldTag, false, 0)); + } while (ContinueArray(fieldTag)); } } @@ -600,7 +615,7 @@ namespace Google.ProtocolBuffers { ReadString(ref tmp); list.Add(tmp); - } while (ContinueArray(fieldTag, false, 0)); + } while (ContinueArray(fieldTag)); } [CLSCompliant(false)] @@ -611,7 +626,7 @@ namespace Google.ProtocolBuffers { ReadBytes(ref tmp); list.Add(tmp); - } while (ContinueArray(fieldTag, false, 0)); + } while (ContinueArray(fieldTag)); } [CLSCompliant(false)] @@ -869,7 +884,7 @@ namespace Google.ProtocolBuffers } unknown.Add(unkval); } - } while (ContinueArray(fieldTag, false, 0)); + } while (ContinueArray(fieldTag)); } } @@ -921,7 +936,7 @@ namespace Google.ProtocolBuffers } unknown.Add(unkval); } - } while (ContinueArray(fieldTag, false, 0)); + } while (ContinueArray(fieldTag)); } } @@ -934,7 +949,7 @@ namespace Google.ProtocolBuffers IBuilderLite builder = messageType.WeakCreateBuilderForType(); ReadMessage(builder, registry); list.Add((T) builder.WeakBuildPartial()); - } while (ContinueArray(fieldTag, false, 0)); + } while (ContinueArray(fieldTag)); } [CLSCompliant(false)] @@ -946,7 +961,7 @@ namespace Google.ProtocolBuffers IBuilderLite builder = messageType.WeakCreateBuilderForType(); ReadGroup(WireFormat.GetTagFieldNumber(fieldTag), builder, registry); list.Add((T) builder.WeakBuildPartial()); - } while (ContinueArray(fieldTag, false, 0)); + } while (ContinueArray(fieldTag)); } ///