From 84b2f228462c6765816d19c4c496cae86fcd26bb Mon Sep 17 00:00:00 2001 From: ESH Date: Mon, 13 Jan 2025 20:17:04 +0100 Subject: [PATCH] Avoid recalc of string length in integer ToString --- BeefLibs/corlib/src/Int32.bf | 2 +- BeefLibs/corlib/src/Int64.bf | 6 ++---- BeefLibs/corlib/src/UInt32.bf | 2 +- BeefLibs/corlib/src/UInt64.bf | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/BeefLibs/corlib/src/Int32.bf b/BeefLibs/corlib/src/Int32.bf index 1ca40c80..e2bff733 100644 --- a/BeefLibs/corlib/src/Int32.bf +++ b/BeefLibs/corlib/src/Int32.bf @@ -86,7 +86,7 @@ namespace System if (isNeg) strChars[char8Idx--] = '-'; char8* char8Ptr = &strChars[char8Idx + 1]; - strBuffer.Append(char8Ptr); + strBuffer.Append(char8Ptr, 14 - char8Idx); } void ToString(String strBuffer, int minNumerals) diff --git a/BeefLibs/corlib/src/Int64.bf b/BeefLibs/corlib/src/Int64.bf index 71436789..e4ff1ca9 100644 --- a/BeefLibs/corlib/src/Int64.bf +++ b/BeefLibs/corlib/src/Int64.bf @@ -82,25 +82,23 @@ namespace System int32 char8Idx = 20; int64 valLeft = (int64)this; bool isNeg = true; - int minNumeralsLeft = 0; if (valLeft >= 0) { valLeft = -valLeft; isNeg = false; } - while ((valLeft < 0) || (minNumeralsLeft > 0)) + while (valLeft < 0) { strChars[char8Idx] = (char8)('0' &- (valLeft % 10)); valLeft /= 10; char8Idx--; - minNumeralsLeft--; } if (char8Idx == 20) strChars[char8Idx--] = '0'; if (isNeg) strChars[char8Idx--] = '-'; char8* char8Ptr = &strChars[char8Idx + 1]; - strBuffer.Append(char8Ptr); + strBuffer.Append(char8Ptr, 20 - char8Idx); } public static Result Parse(StringView val, NumberStyles style = .Number, CultureInfo cultureInfo = null) diff --git a/BeefLibs/corlib/src/UInt32.bf b/BeefLibs/corlib/src/UInt32.bf index d174ae0c..59f1a610 100644 --- a/BeefLibs/corlib/src/UInt32.bf +++ b/BeefLibs/corlib/src/UInt32.bf @@ -73,7 +73,7 @@ namespace System if (char8Idx == 14) strChars[char8Idx--] = '0'; char8* char8Ptr = &strChars[char8Idx + 1]; - strBuffer.Append(char8Ptr); + strBuffer.Append(char8Ptr, 14 - char8Idx); } void ToString(String strBuffer, int minNumerals) diff --git a/BeefLibs/corlib/src/UInt64.bf b/BeefLibs/corlib/src/UInt64.bf index c12e1b7e..3003f2d3 100644 --- a/BeefLibs/corlib/src/UInt64.bf +++ b/BeefLibs/corlib/src/UInt64.bf @@ -85,7 +85,7 @@ namespace System if (char8Idx == 20) strChars[char8Idx--] = '0'; char8* char8Ptr = &strChars[char8Idx + 1]; - strBuffer.Append(char8Ptr); + strBuffer.Append(char8Ptr, 20 - char8Idx); } public static Result Parse(StringView val, NumberStyles style = .Number, CultureInfo cultureInfo = null)