Changing Number.BigInteger and Number.NumberBuffer to directly use fixed-sized buffer...
[platform/upstream/coreclr.git] / src / System.Private.CoreLib / shared / System / Number.NumberBuffer.cs
index c4d5ba5..b5ed19b 100644 (file)
@@ -19,22 +19,20 @@ namespace System
         [StructLayout(LayoutKind.Sequential, Pack = 1)]
         internal unsafe ref struct NumberBuffer
         {
-            public int precision;                       //  0
-            public int scale;                           //  4
-            private int _sign;                          //  8
-            private NumberBufferKind _kind;             // 12
-            private char* _allDigits;                   // 16
-            private DigitsAndNullTerminator _digits;    // 20 or 24
-
-            public bool sign { get => _sign != 0; set => _sign = value ? 1 : 0; }
-            public char* digits => (char*)Unsafe.AsPointer(ref _digits);
-            public NumberBufferKind kind { get => _kind; set => _kind = value; }
-
-            [StructLayout(LayoutKind.Sequential, Size = (NumberMaxDigits + 1) * sizeof(char))]
-            private struct DigitsAndNullTerminator { }
+            public int precision;
+            public int scale;
+            public bool sign;
+            public NumberBufferKind kind;
+            public fixed char digits[NumberMaxDigits + 1];
+
+            public char* GetDigitsPointer()
+            {
+                // This is safe to do since we are a ref struct
+                return (char*)(Unsafe.AsPointer(ref digits[0]));
+            }
         }
 
-        internal enum NumberBufferKind
+        internal enum NumberBufferKind : byte
         {
             Unknown = 0,
             Integer = 1,