diff options
author | Jon Skeet <skeet@pobox.com> | 2008-08-14 20:33:27 +0100 |
---|---|---|
committer | unknown <Jon@.(none)> | 2008-08-14 20:33:27 +0100 |
commit | baa2bf54c2d8d493444fd3d58bd8a89927300a50 (patch) | |
tree | 2b293b640a1ac5ee0d44178e5b0e22ddfaccdc6f /csharp/ProtocolBuffers/ByteString.cs | |
parent | 3c38991607e993bc90c307c7a680fba97b77ecb4 (diff) | |
download | protobuf-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.cs | 96 |
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 + } +} |