aboutsummaryrefslogtreecommitdiff
path: root/csharp/ProtocolBuffers/ByteString.cs
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2008-08-14 20:33:27 +0100
committerunknown <Jon@.(none)>2008-08-14 20:33:27 +0100
commitbaa2bf54c2d8d493444fd3d58bd8a89927300a50 (patch)
tree2b293b640a1ac5ee0d44178e5b0e22ddfaccdc6f /csharp/ProtocolBuffers/ByteString.cs
parent3c38991607e993bc90c307c7a680fba97b77ecb4 (diff)
downloadprotobuf-baa2bf54c2d8d493444fd3d58bd8a89927300a50.tar.gz
protobuf-baa2bf54c2d8d493444fd3d58bd8a89927300a50.tar.bz2
protobuf-baa2bf54c2d8d493444fd3d58bd8a89927300a50.zip
First part of dotnet library
committer: Jon Skeet <skeet@pobox.com>
Diffstat (limited to 'csharp/ProtocolBuffers/ByteString.cs')
-rw-r--r--csharp/ProtocolBuffers/ByteString.cs96
1 files changed, 96 insertions, 0 deletions
diff --git a/csharp/ProtocolBuffers/ByteString.cs b/csharp/ProtocolBuffers/ByteString.cs
new file mode 100644
index 00000000..1ce2453e
--- /dev/null
+++ b/csharp/ProtocolBuffers/ByteString.cs
@@ -0,0 +1,96 @@
+using System.Text;
+using System;
+
+namespace Google.ProtocolBuffers {
+ /// <summary>
+ /// Immutable array of bytes.
+ /// TODO(jonskeet): Implement the common collection interfaces?
+ /// </summary>
+ public sealed class ByteString {
+
+ private static readonly ByteString empty = new ByteString(new byte[0]);
+
+ private byte[] bytes;
+
+ /// <summary>
+ /// Constructs a new ByteString from the given byte array. The array is
+ /// *not* copied, and must not be modified after this constructor is called.
+ /// </summary>
+ private ByteString(byte[] bytes) {
+ this.bytes = bytes;
+ }
+
+ /// <summary>
+ /// Returns an empty ByteString.
+ /// </summary>
+ public static ByteString Empty {
+ get { return empty; }
+ }
+
+ /// <summary>
+ /// Returns the length of this ByteString in bytes.
+ /// </summary>
+ public int Length {
+ get { return bytes.Length; }
+ }
+
+ public bool IsEmpty {
+ get { return Length == 0; }
+ }
+
+ public byte[] ToByteArray() {
+ return (byte[])bytes.Clone();
+ }
+
+ /// <summary>
+ /// Constructs a ByteString from the given array. The contents
+ /// are copied, so further modifications to the array will not
+ /// be reflected in the returned ByteString.
+ /// </summary>
+ public static ByteString CopyFrom(byte[] bytes) {
+ return new ByteString((byte[]) bytes.Clone());
+ }
+
+ /// <summary>
+ /// Constructs a ByteString from a portion of a byte array.
+ /// </summary>
+ public static ByteString CopyFrom(byte[] bytes, int offset, int count) {
+ byte[] portion = new byte[count];
+ Array.Copy(bytes, offset, portion, 0, count);
+ return new ByteString(portion);
+ }
+
+ /// <summary>
+ /// Creates a new ByteString by encoding the specified text with
+ /// the given encoding.
+ /// </summary>
+ public static ByteString CopyFrom(string text, Encoding encoding) {
+ return new ByteString(encoding.GetBytes(text));
+ }
+
+ /// <summary>
+ /// Creates a new ByteString by encoding the specified text in UTF-8.
+ /// </summary>
+ public static ByteString CopyFromUtf8(string text) {
+ return CopyFrom(text, Encoding.UTF8);
+ }
+
+ /// <summary>
+ /// Retuns the byte at the given index.
+ /// </summary>
+ public byte this[int index] {
+ get { return bytes[index]; }
+ }
+
+ public string ToString(Encoding encoding) {
+ return encoding.GetString(bytes);
+ }
+
+ public string ToStringUtf8() {
+ return ToString(Encoding.UTF8);
+ }
+
+ // TODO(jonskeet): CopyTo, Equals, GetHashCode if they turn out to be required
+ // TODO(jonskeet): Input/Output stuff
+ }
+}