aboutsummaryrefslogtreecommitdiff
path: root/csharp/src/ProtocolBuffers/MessageExtensions.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/MessageExtensions.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/MessageExtensions.cs')
-rw-r--r--csharp/src/ProtocolBuffers/MessageExtensions.cs81
1 files changed, 81 insertions, 0 deletions
diff --git a/csharp/src/ProtocolBuffers/MessageExtensions.cs b/csharp/src/ProtocolBuffers/MessageExtensions.cs
new file mode 100644
index 00000000..57cecfd4
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/MessageExtensions.cs
@@ -0,0 +1,81 @@
+using System.IO;
+
+namespace Google.Protobuf
+{
+ /// <summary>
+ /// Extension methods on <see cref="IMessage"/> and <see cref="IMessage{T}"/>.
+ /// </summary>
+ public static class MessageExtensions
+ {
+ public static void MergeFrom(this IMessage message, byte[] data)
+ {
+ ThrowHelper.ThrowIfNull(message, "message");
+ ThrowHelper.ThrowIfNull(data, "data");
+ CodedInputStream input = CodedInputStream.CreateInstance(data);
+ message.MergeFrom(input);
+ input.CheckLastTagWas(0);
+ }
+
+ public static void MergeFrom(this IMessage message, ByteString data)
+ {
+ ThrowHelper.ThrowIfNull(message, "message");
+ ThrowHelper.ThrowIfNull(data, "data");
+ CodedInputStream input = data.CreateCodedInput();
+ message.MergeFrom(input);
+ input.CheckLastTagWas(0);
+ }
+
+ public static void MergeFrom(this IMessage message, Stream input)
+ {
+ ThrowHelper.ThrowIfNull(message, "message");
+ ThrowHelper.ThrowIfNull(input, "input");
+ CodedInputStream codedInput = CodedInputStream.CreateInstance(input);
+ message.MergeFrom(codedInput);
+ codedInput.CheckLastTagWas(0);
+ }
+
+ public static void MergeDelimitedFrom(this IMessage message, Stream input)
+ {
+ ThrowHelper.ThrowIfNull(message, "message");
+ ThrowHelper.ThrowIfNull(input, "input");
+ int size = (int)CodedInputStream.ReadRawVarint32(input);
+ Stream limitedStream = new LimitedInputStream(input, size);
+ message.MergeFrom(limitedStream);
+ }
+
+ public static byte[] ToByteArray(this IMessage message)
+ {
+ ThrowHelper.ThrowIfNull(message, "message");
+ byte[] result = new byte[message.CalculateSize()];
+ CodedOutputStream output = CodedOutputStream.CreateInstance(result);
+ message.WriteTo(output);
+ output.CheckNoSpaceLeft();
+ return result;
+ }
+
+ public static void WriteTo(this IMessage message, Stream output)
+ {
+ ThrowHelper.ThrowIfNull(message, "message");
+ ThrowHelper.ThrowIfNull(output, "output");
+ CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output);
+ message.WriteTo(codedOutput);
+ codedOutput.Flush();
+ }
+
+ public static void WriteDelimitedTo(this IMessage message, Stream output)
+ {
+ ThrowHelper.ThrowIfNull(message, "message");
+ ThrowHelper.ThrowIfNull(output, "output");
+ CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output);
+ codedOutput.WriteRawVarint32((uint)message.CalculateSize());
+ message.WriteTo(codedOutput);
+ codedOutput.Flush();
+ }
+
+ public static ByteString ToByteString(this IMessage message)
+ {
+ ThrowHelper.ThrowIfNull(message, "message");
+ return ByteString.AttachBytes(message.ToByteArray());
+ }
+ }
+}