aboutsummaryrefslogtreecommitdiff
path: root/csharp/src/ProtocolBuffers/MessageParser.cs
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2015-06-19 17:30:13 +0100
committerJon Skeet <skeet@pobox.com>2015-06-19 17:30:13 +0100
commitcdeda4b87625084f5687115bb1fd7772b7c34ad6 (patch)
tree373f4c38dbfb318626037ff204c30466574ab876 /csharp/src/ProtocolBuffers/MessageParser.cs
parentd7dda2fed8c37a83e2d4cd7ecc4201b628588c4c (diff)
downloadprotobuf-cdeda4b87625084f5687115bb1fd7772b7c34ad6.tar.gz
protobuf-cdeda4b87625084f5687115bb1fd7772b7c34ad6.tar.bz2
protobuf-cdeda4b87625084f5687115bb1fd7772b7c34ad6.zip
Minor cleanup.
- Make some members internal - Remove a lot of FrameworkPortability that isn't required - Start adding documentation comments - Remove some more group-based members - Not passing in "the last tag read" into Read*Array, g
Diffstat (limited to 'csharp/src/ProtocolBuffers/MessageParser.cs')
-rw-r--r--csharp/src/ProtocolBuffers/MessageParser.cs37
1 files changed, 35 insertions, 2 deletions
diff --git a/csharp/src/ProtocolBuffers/MessageParser.cs b/csharp/src/ProtocolBuffers/MessageParser.cs
index 722435cc..18cda2dc 100644
--- a/csharp/src/ProtocolBuffers/MessageParser.cs
+++ b/csharp/src/ProtocolBuffers/MessageParser.cs
@@ -1,26 +1,58 @@
using System;
using System.IO;
-using Google.Protobuf;
namespace Google.Protobuf
{
+ /// <summary>
+ /// A parser for a specific message type.
+ /// </summary>
+ /// <remarks>
+ /// <p>
+ /// This delegates most behavior to the
+ /// <see cref="IMessage.MergeFrom"/> implementation within the original type, but
+ /// provides convenient overloads to parse from a variety of sources.
+ /// </p>
+ /// <p>
+ /// Most applications will never need to create their own instances of this type;
+ /// instead, use the static <c>Parser</c> property of a generated message type to obtain a
+ /// parser for that type.
+ /// </p>
+ /// </remarks>
+ /// <typeparam name="T">The type of message to be parsed.</typeparam>
public sealed class MessageParser<T> where T : IMessage<T>
{
private readonly Func<T> factory;
+ /// <summary>
+ /// Creates a new parser.
+ /// </summary>
+ /// <remarks>
+ /// The factory method is effectively an optimization over using a generic constraint
+ /// to require a parameterless constructor: delegates are significantly faster to execute.
+ /// </remarks>
+ /// <param name="factory">Function to invoke when a new, empty message is required.</param>
public MessageParser(Func<T> factory)
{
this.factory = factory;
}
- // Creates a template instance ready for population.
+ /// <summary>
+ /// Creates a template instance ready for population.
+ /// </summary>
+ /// <returns>An empty message.</returns>
internal T CreateTemplate()
{
return factory();
}
+ /// <summary>
+ /// Parses a message from a byte array.
+ /// </summary>
+ /// <param name="data">The byte array containing the message. Must not be null.</param>
+ /// <returns>The newly parsed message.</returns>
public T ParseFrom(byte[] data)
{
+ ThrowHelper.ThrowIfNull(data, "data");
T message = factory();
message.MergeFrom(data);
return message;
@@ -28,6 +60,7 @@ namespace Google.Protobuf
public T ParseFrom(ByteString data)
{
+ ThrowHelper.ThrowIfNull(data, "data");
T message = factory();
message.MergeFrom(data);
return message;