// 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); } } }