From 84b2f228462c6765816d19c4c496cae86fcd26bb Mon Sep 17 00:00:00 2001 From: ESH Date: Mon, 13 Jan 2025 20:17:04 +0100 Subject: [PATCH 1/2] 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) From 954858701f9db84ef5dcd773a6593f812a5ceb48 Mon Sep 17 00:00:00 2001 From: ESH Date: Mon, 13 Jan 2025 20:30:03 +0100 Subject: [PATCH 2/2] Integer ToString no longer need zeroed buffer --- BeefLibs/corlib/src/Int32.bf | 2 +- BeefLibs/corlib/src/Int64.bf | 2 +- BeefLibs/corlib/src/UInt32.bf | 2 +- BeefLibs/corlib/src/UInt64.bf | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/BeefLibs/corlib/src/Int32.bf b/BeefLibs/corlib/src/Int32.bf index e2bff733..691621c7 100644 --- a/BeefLibs/corlib/src/Int32.bf +++ b/BeefLibs/corlib/src/Int32.bf @@ -66,7 +66,7 @@ namespace System public override void ToString(String strBuffer) { // Dumb, make better. - char8[] strChars = scope:: char8[16]; + char8[16] strChars = ?; int32 char8Idx = 14; int32 valLeft = (int32)this; bool isNeg = true; diff --git a/BeefLibs/corlib/src/Int64.bf b/BeefLibs/corlib/src/Int64.bf index e4ff1ca9..5540c76e 100644 --- a/BeefLibs/corlib/src/Int64.bf +++ b/BeefLibs/corlib/src/Int64.bf @@ -78,7 +78,7 @@ namespace System public override void ToString(String strBuffer) { // Dumb, make better. - char8[] strChars = scope:: char8[22]; + char8[22] strChars = ?; int32 char8Idx = 20; int64 valLeft = (int64)this; bool isNeg = true; diff --git a/BeefLibs/corlib/src/UInt32.bf b/BeefLibs/corlib/src/UInt32.bf index 59f1a610..dc585908 100644 --- a/BeefLibs/corlib/src/UInt32.bf +++ b/BeefLibs/corlib/src/UInt32.bf @@ -61,7 +61,7 @@ namespace System public override void ToString(String strBuffer) { // Dumb, make better. - char8[] strChars = scope:: char8[16]; + char8[16] strChars = ?; int32 char8Idx = 14; uint32 valLeft = (uint32)this; while (valLeft > 0) diff --git a/BeefLibs/corlib/src/UInt64.bf b/BeefLibs/corlib/src/UInt64.bf index 3003f2d3..59dd6910 100644 --- a/BeefLibs/corlib/src/UInt64.bf +++ b/BeefLibs/corlib/src/UInt64.bf @@ -73,7 +73,7 @@ namespace System public override void ToString(String strBuffer) { // Dumb, make better. - char8[] strChars = scope:: char8[22]; + char8[22] strChars = ?; int32 char8Idx = 20; uint64 valLeft = (uint64)this; while (valLeft > 0)