mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-12 21:34:11 +02:00
added string reverse method
This commit is contained in:
parent
ef0bc6033b
commit
31e811d4d8
1 changed files with 49 additions and 0 deletions
|
@ -3025,6 +3025,55 @@ namespace System
|
||||||
return sIdStringLiterals[id];
|
return sIdStringLiterals[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Reverse(String strBuffer)
|
||||||
|
{
|
||||||
|
int_strsize originalLength = this.mLength;
|
||||||
|
char8* originalPtr = this.Ptr;
|
||||||
|
|
||||||
|
if (originalLength <= 1)
|
||||||
|
{
|
||||||
|
strBuffer.Set(.(originalPtr, originalLength));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char8* tempBuffer = new:this char8[originalLength]* (?);
|
||||||
|
defer delete tempBuffer;
|
||||||
|
|
||||||
|
int_strsize writeIdx = 0;
|
||||||
|
int_strsize readPos = originalLength;
|
||||||
|
|
||||||
|
while (readPos > 0) {
|
||||||
|
int_strsize currentReadIdx = readPos - 1;
|
||||||
|
int_strsize startIdx = currentReadIdx;
|
||||||
|
char8 c = originalPtr[startIdx];
|
||||||
|
int8 len = 1;
|
||||||
|
|
||||||
|
if (c >= (.)0x80) {
|
||||||
|
while (startIdx > 0 && ((uint8)originalPtr[startIdx] & 0xC0) == 0x80)
|
||||||
|
startIdx--;
|
||||||
|
|
||||||
|
var (decodedC32, decodedLen) = UTF8.Decode(originalPtr + startIdx, originalLength - startIdx);
|
||||||
|
|
||||||
|
if (decodedLen <= 0) {
|
||||||
|
len = 1;
|
||||||
|
startIdx = currentReadIdx;
|
||||||
|
} else {
|
||||||
|
len = decodedLen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Internal.MemCpy(tempBuffer + writeIdx, originalPtr + startIdx, len);
|
||||||
|
|
||||||
|
writeIdx += len;
|
||||||
|
readPos = startIdx;
|
||||||
|
}
|
||||||
|
|
||||||
|
Runtime.Assert(writeIdx == originalLength);
|
||||||
|
|
||||||
|
strBuffer.Clear();
|
||||||
|
strBuffer.Reserve(originalLength);
|
||||||
|
strBuffer.Append(tempBuffer, originalLength);
|
||||||
|
}
|
||||||
|
|
||||||
public struct RawEnumerator : IRefEnumerator<char8*>, IEnumerator<char8>
|
public struct RawEnumerator : IRefEnumerator<char8*>, IEnumerator<char8>
|
||||||
{
|
{
|
||||||
char8* mPtr;
|
char8* mPtr;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue