From b3a3e25de94bfeb01e275240686dc7f19e345c6f Mon Sep 17 00:00:00 2001 From: disarray2077 <86157825+disarray2077@users.noreply.github.com> Date: Sun, 1 Aug 2021 18:43:19 -0300 Subject: [PATCH] Add Trim with char parameter --- BeefLibs/corlib/src/String.bf | 162 ++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) diff --git a/BeefLibs/corlib/src/String.bf b/BeefLibs/corlib/src/String.bf index 6a5346b1..04d98368 100644 --- a/BeefLibs/corlib/src/String.bf +++ b/BeefLibs/corlib/src/String.bf @@ -2130,6 +2130,82 @@ namespace System TrimEnd(); } + public void TrimEnd(char32 trimChar) + { + let ptr = Ptr; + for (int i = mLength - 1; i >= 0; i--) + { + char8 c = ptr[i]; + if (c >= (char8)0x80) + { + var (c32, idx, len) = GetChar32WithBacktrack(i); + if (c32 != trimChar) + { + if (i < mLength - 1) + RemoveToEnd(i + 1); + return; + } + i = idx; + } + else if ((char32)c != trimChar) + { + if (i < mLength - 1) + RemoveToEnd(i + 1); + return; + } + } + Clear(); + } + + public void TrimEnd(char8 trimChar) + { + TrimEnd((char32)trimChar); + } + + public void TrimStart(char32 trimChar) + { + let ptr = Ptr; + for (int i = 0; i < mLength; i++) + { + char8 c = ptr[i]; + if (c >= (char8)0x80) + { + var (c32, len) = GetChar32(i); + if (c32 != trimChar) + { + if (i > 0) + Remove(0, i); + return; + } + i += len - 1; + } + else if ((char32)c != trimChar) + { + if (i > 0) + Remove(0, i); + return; + } + } + Clear(); + } + + public void TrimStart(char8 trimChar) + { + TrimStart((char32)trimChar); + } + + public void Trim(char32 trimChar) + { + TrimStart(trimChar); + TrimEnd(trimChar); + } + + public void Trim(char8 trimChar) + { + TrimStart((.)trimChar); + TrimEnd((.)trimChar); + } + public void Join(StringView sep, IEnumerator enumerable) { bool isFirst = true; @@ -3130,6 +3206,92 @@ namespace System TrimEnd(); } + public void TrimEnd(char32 trimChar) mut + { + let ptr = Ptr; + for (int i = mLength - 1; i >= 0; i--) + { + char8 c = ptr[i]; + if (c >= (char8)0x80) + { + var (c32, idx, len) = GetChar32WithBacktrack(i); + if (c32 != trimChar) + { + if (i < mLength - 1) + { + mLength = i + 1; + } + return; + } + i = idx; + } + else if (c != (char32)trimChar) + { + if (i < mLength - 1) + { + mLength = i + 1; + } + return; + } + } + Clear(); + } + + public void TrimEnd(char8 trimChar) mut + { + TrimEnd((char32)trimChar); + } + + public void TrimStart(char32 trimChar) mut + { + let ptr = Ptr; + for (int i = 0; i < mLength; i++) + { + char8 c = ptr[i]; + if (c >= (char8)0x80) + { + var (c32, len) = GetChar32(i); + if (c32 != trimChar) + { + if (i > 0) + { + mPtr += i; + mLength -= i; + } + return; + } + i += len - 1; + } + else if (c != (char32)trimChar) + { + if (i > 0) + { + mPtr += i; + mLength -= i; + } + return; + } + } + Clear(); + } + + public void TrimStart(char8 trimChar) mut + { + TrimStart((char32)trimChar); + } + + public void Trim(char32 trimChar) mut + { + TrimStart(trimChar); + TrimEnd(trimChar); + } + + public void Trim(char8 trimChar) mut + { + TrimStart((.)trimChar); + TrimEnd((.)trimChar); + } + public bool StartsWith(char8 c) { if (mLength == 0)