singrdk/base/Applications/cassini/ByteString.cs

126 lines
3.2 KiB
C#

//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All Rights Reserved.
//------------------------------------------------------------------------------
namespace Microsoft.VisualStudio.WebHost
{
using System;
using System.Collections;
using System.Text;
internal sealed class ByteString {
private byte[] _bytes;
private int _offset;
private int _length;
public ByteString(byte[] bytes, int offset, int length) {
_bytes = bytes;
_offset = offset;
_length = length;
}
public byte[] Bytes {
get {
return _bytes;
}
}
public bool IsEmpty {
get {
return (_bytes == null || _length == 0);
}
}
public int Length {
get {
return _length;
}
}
public int Offset {
get {
return _offset;
}
}
public byte this[int index] {
get {
return _bytes[_offset+index];
}
}
public String GetString() {
return GetString(Encoding.UTF8);
}
public String GetString(Encoding enc) {
if (IsEmpty) {
return String.Empty;
}
return enc.GetString(_bytes, _offset, _length);
}
public byte[] GetBytes() {
byte[] bytes = new byte[_length];
if (_length > 0) {
Buffer.BlockCopy(_bytes, _offset, bytes, 0, _length);
}
return bytes;
}
public int IndexOf(char ch) {
return IndexOf(ch, 0);
}
public int IndexOf(char ch, int offset) {
for (int i = offset; i < _length; i++) {
if (this[i] == (byte)ch) {
return i;
}
}
return -1;
}
public ByteString Substring(int offset) {
return Substring(offset, _length-offset);
}
public ByteString Substring(int offset, int len) {
return new ByteString(_bytes, _offset+offset, len);
}
public ByteString[] Split(char sep) {
ArrayList list = new ArrayList();
int pos = 0;
while (pos < _length) {
int i = IndexOf(sep, pos);
if (i < 0) {
break;
}
list.Add(Substring(pos, i-pos));
pos = i+1;
while (this[pos] == (byte)sep && pos < _length) {
pos++;
}
}
if (pos < _length) {
list.Add(Substring(pos));
}
int n = list.Count;
ByteString[] result = new ByteString[n];
for (int i = 0; i < n; i++) {
result[i] = (ByteString)list[i];
}
return result;
}
}
}