You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.3 KiB
91 lines
2.3 KiB
#if NET20 || NET30 || NET35 || !NET_4_6 |
|
|
|
using System.Collections; |
|
using System.Collections.Generic; |
|
|
|
namespace System.Numerics |
|
{ |
|
internal class ReverseStringBuilder : IEnumerable<char> |
|
{ |
|
private readonly char[] _buffer; |
|
private int _start; |
|
|
|
public ReverseStringBuilder(int capacity) |
|
{ |
|
_buffer = new char[capacity]; |
|
_start = _buffer.Length; |
|
} |
|
|
|
public char[] Buffer |
|
{ |
|
get { return _buffer; } |
|
} |
|
|
|
public int Length |
|
{ |
|
get { return _buffer.Length - _start; } |
|
} |
|
|
|
public void Prepend(char character) |
|
{ |
|
_buffer[--_start] = character; |
|
} |
|
|
|
public void Prepend(string str) |
|
{ |
|
for (var index = str.Length - 1; index > -1; index--) |
|
{ |
|
_buffer[--_start] = str[index]; |
|
} |
|
} |
|
|
|
public IEnumerator<char> GetEnumerator() |
|
{ |
|
for (var position = _buffer.Length - 1; position >= 0; position--) |
|
{ |
|
yield return _buffer[position]; |
|
} |
|
} |
|
|
|
public override |
|
string ToString() |
|
{ |
|
return new string(_buffer, _start, _buffer.Length - _start); |
|
} |
|
|
|
IEnumerator IEnumerable.GetEnumerator() |
|
{ |
|
return GetEnumerator(); |
|
} |
|
|
|
public string ToString(int maxLength) |
|
{ |
|
var length = _buffer.Length - _start; |
|
if (length > maxLength) |
|
{ |
|
length = maxLength; |
|
} |
|
return new string(_buffer, _buffer.Length - length, length); |
|
} |
|
|
|
public string ToString(int backIndex, int maxLength) |
|
{ |
|
var length = _buffer.Length - _start; |
|
if (length > maxLength) |
|
{ |
|
length = maxLength; |
|
} |
|
/*if (backIndex < length) |
|
{ |
|
throw new ArgumentOutOfRangeException("maxLength", "Too small"); |
|
} |
|
if (backIndex > _buffer.Length) |
|
{ |
|
throw new ArgumentOutOfRangeException("maxLength", "Too large"); |
|
}*/ |
|
return new string(_buffer, _buffer.Length - backIndex, length); |
|
} |
|
} |
|
} |
|
|
|
#endif |