mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-10-02 10:22:52 -04:00
133 lines
2.9 KiB
C#
133 lines
2.9 KiB
C#
// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
|
|
using System;
|
|
|
|
namespace ClassicalSharp {
|
|
|
|
public class StringBuffer {
|
|
|
|
public char[] value;
|
|
public int Capacity;
|
|
|
|
public StringBuffer( int capacity ) {
|
|
this.Capacity = capacity;
|
|
value = new char[capacity];
|
|
}
|
|
|
|
public StringBuffer Append( int index, char c ) {
|
|
value[index] = c;
|
|
return this;
|
|
}
|
|
|
|
public StringBuffer Append( int index, string s ) {
|
|
return Append( ref index, s );
|
|
}
|
|
|
|
public StringBuffer Append( ref int index, string s ) {
|
|
for( int i = 0; i < s.Length; i++ )
|
|
value[index++] = s[i];
|
|
return this;
|
|
}
|
|
|
|
public StringBuffer AppendColourless( ref int index, string s ) {
|
|
for( int i = 0; i < s.Length; i++ ) {
|
|
char token = s[i];
|
|
if( token == '&' )
|
|
i++;// Skip over the following colour code.
|
|
else
|
|
value[index++] = token;
|
|
}
|
|
return this;
|
|
}
|
|
|
|
public StringBuffer Append( ref int index, char c) {
|
|
value[index++] = c;
|
|
return this;
|
|
}
|
|
|
|
static char[] numBuffer = new char[20];
|
|
public StringBuffer AppendNum( ref int index, long num ) {
|
|
int numLen = MakeNum( num );
|
|
for( int i = numLen - 1; i >= 0; i-- )
|
|
value[index++] = numBuffer[i];
|
|
return this;
|
|
}
|
|
|
|
public StringBuffer AppendPaddedNum( ref int index, int minDigits, long num ) {
|
|
for( int i = 0; i < minDigits; i++ )
|
|
numBuffer[i] = '0';
|
|
int numLen = Math.Max( minDigits, MakeNum( num ) );
|
|
for( int i = numLen - 1; i >= 0; i-- )
|
|
value[index++] = numBuffer[i];
|
|
return this;
|
|
}
|
|
|
|
int MakeNum( long num ) {
|
|
int len = 0;
|
|
numBuffer[len++] = (char)('0' + (num % 10)); num /= 10;
|
|
|
|
while( num > 0 ) {
|
|
numBuffer[len++] = (char)('0' + (num % 10)); num /= 10;
|
|
}
|
|
return len;
|
|
}
|
|
|
|
public StringBuffer Clear() {
|
|
for( int i = 0; i < Capacity; i++ )
|
|
value[i] = '\0';
|
|
return this;
|
|
}
|
|
|
|
public void DeleteAt( int index ) {
|
|
for( int i = index; i < Capacity - 1; i++ )
|
|
value[i] = value[i + 1];
|
|
value[Capacity - 1] = '\0';
|
|
}
|
|
|
|
public void InsertAt( int index, char c ) {
|
|
for( int i = Capacity - 1; i > index; i-- )
|
|
value[i] = value[i - 1];
|
|
value[index] = c;
|
|
}
|
|
|
|
public void InsertAt( int index, string s ) {
|
|
for( int i = 0; i < s.Length; i++ )
|
|
InsertAt( index + i, s[i] );
|
|
}
|
|
|
|
public bool Empty {
|
|
get {
|
|
for( int i = 0; i < Capacity; i++ ) {
|
|
if( value[i] != '\0' ) return false;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public int Length {
|
|
get {
|
|
int len = Capacity;
|
|
for( int i = Capacity - 1; i >= 0; i-- ) {
|
|
if( value[i] != '\0' ) break;
|
|
len--;
|
|
}
|
|
return len;
|
|
}
|
|
}
|
|
|
|
public int TextLength {
|
|
get {
|
|
int len = Capacity;
|
|
for( int i = Capacity - 1; i >= 0; i-- ) {
|
|
if( value[i] != '\0' && value[i] != ' ') break;
|
|
len--;
|
|
}
|
|
return len;
|
|
}
|
|
}
|
|
|
|
public override string ToString() {
|
|
return new String( value, 0, Length );
|
|
}
|
|
}
|
|
}
|