mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-24 05:10:42 -04:00
127 lines
2.6 KiB
C#
127 lines
2.6 KiB
C#
// Copyright 2014-2017 ClassicalSharp | Licensed under BSD-3
|
|
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, int 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, int 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(int num) {
|
|
int len = 0;
|
|
do {
|
|
numBuffer[len] = (char)('0' + (num % 10));
|
|
num /= 10; len++;
|
|
} while (num > 0);
|
|
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 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);
|
|
}
|
|
}
|
|
}
|