Short-circuit on the count, not the array length, in common Encoding methods (dotnet...
authorJames Ko <jamesqko@gmail.com>
Mon, 4 Jul 2016 05:39:12 +0000 (01:39 -0400)
committerJan Kotas <jkotas@microsoft.com>
Mon, 4 Jul 2016 05:39:12 +0000 (07:39 +0200)
* Short-circuit using count instead of array.Length
* Use Array.Empty in default Reset implementation

Commit migrated from https://github.com/dotnet/coreclr/commit/a1e785dccf35af4305f2536b1e25cb719e8f1943

src/coreclr/src/mscorlib/src/System/Text/ASCIIEncoding.cs
src/coreclr/src/mscorlib/src/System/Text/Decoder.cs
src/coreclr/src/mscorlib/src/System/Text/EncodingNLS.cs
src/coreclr/src/mscorlib/src/System/Text/UTF32Encoding.cs
src/coreclr/src/mscorlib/src/System/Text/UTF7Encoding.cs
src/coreclr/src/mscorlib/src/System/Text/UTF8Encoding.cs
src/coreclr/src/mscorlib/src/System/Text/UnicodeEncoding.cs

index 0d8e72c..178ade5 100644 (file)
@@ -73,7 +73,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0, avoid fixed empty array problem
-            if (chars.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call the pointer version
@@ -196,7 +196,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If nothing to encode return 0, avoid fixed problem
-            if (chars.Length == 0)
+            if (charCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -261,7 +261,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input just return 0, fixed doesn't like 0 length arrays
-            if (bytes.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call pointer version
@@ -319,7 +319,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0 & avoid fixed problem
-            if (bytes.Length == 0)
+            if (byteCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -385,7 +385,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // Avoid problems with empty input buffer
-            if (bytes.Length == 0) return String.Empty;
+            if (byteCount == 0) return String.Empty;
 
             fixed (byte* pBytes = bytes)
                 return String.CreateStringFromEncoding(
index 2357f2a..f794dc4 100644 (file)
@@ -101,7 +101,7 @@ namespace System.Text
         [System.Runtime.InteropServices.ComVisible(false)]
         public virtual void Reset()
         {
-            byte[] byteTemp = {};
+            byte[] byteTemp = Array.Empty<byte>();
             char[] charTemp = new char[GetCharCount(byteTemp, 0, 0, true)];
             GetChars(byteTemp, 0, 0, charTemp, 0, true);
             if (m_fallbackBuffer != null)
index 29e703d..73aba3d 100644 (file)
@@ -59,7 +59,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0, avoid fixed empty array problem
-            if (chars.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call the pointer version
@@ -176,7 +176,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If nothing to encode return 0, avoid fixed problem
-            if (chars.Length == 0)
+            if (charCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -237,7 +237,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input just return 0, fixed doesn't like 0 length arrays
-            if (bytes.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call pointer version
@@ -291,7 +291,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0 & avoid fixed problem
-            if (bytes.Length == 0)
+            if (byteCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -352,7 +352,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // Avoid problems with empty input buffer
-            if (bytes.Length == 0) return String.Empty;
+            if (count == 0) return String.Empty;
             
             fixed (byte* pBytes = bytes)
                 return String.CreateStringFromEncoding(
index e32bdcb..02a3232 100644 (file)
@@ -112,7 +112,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0, avoid fixed empty array problem
-            if (chars.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call the pointer version
@@ -234,7 +234,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If nothing to encode return 0, avoid fixed problem
-            if (chars.Length == 0)
+            if (charCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -298,7 +298,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input just return 0, fixed doesn't like 0 length arrays.
-            if (bytes.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call pointer version
@@ -355,7 +355,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0 & avoid fixed problem
-            if (bytes.Length == 0)
+            if (byteCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -419,7 +419,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // Avoid problems with empty input buffer
-            if (bytes.Length == 0) return String.Empty;
+            if (count == 0) return String.Empty;
 
             fixed (byte* pBytes = bytes)
                 return String.CreateStringFromEncoding(
index 0b0dd0d..727a43b 100644 (file)
@@ -178,7 +178,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0, avoid fixed empty array problem
-            if (chars.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call the pointer version
@@ -303,7 +303,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If nothing to encode return 0, avoid fixed problem
-            if (chars.Length == 0)
+            if (charCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -368,7 +368,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input just return 0, fixed doesn't like 0 length arrays.
-            if (bytes.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call pointer version
@@ -426,7 +426,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0 & avoid fixed problem
-            if (bytes.Length == 0)
+            if (byteCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -492,7 +492,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // Avoid problems with empty input buffer
-            if (bytes.Length == 0) return String.Empty;
+            if (count == 0) return String.Empty;
 
             fixed (byte* pBytes = bytes)
                 return String.CreateStringFromEncoding(
index e6c6d86..874f7f3 100644 (file)
@@ -136,7 +136,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0, avoid fixed empty array problem
-            if (chars.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call the pointer version
@@ -259,7 +259,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If nothing to encode return 0, avoid fixed problem
-            if (chars.Length == 0)
+            if (charCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -324,7 +324,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input just return 0, fixed doesn't like 0 length arrays.
-            if (bytes.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call pointer version
@@ -382,7 +382,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0 & avoid fixed problem
-            if (bytes.Length == 0)
+            if (byteCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -448,7 +448,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // Avoid problems with empty input buffer
-            if (bytes.Length == 0) return String.Empty;
+            if (count == 0) return String.Empty;
 
             fixed (byte* pBytes = bytes)
                 return String.CreateStringFromEncoding(
index b2b68f0..6f0b6ef 100644 (file)
@@ -110,7 +110,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0, avoid fixed empty array problem
-            if (chars.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call the pointer version
@@ -233,7 +233,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If nothing to encode return 0, avoid fixed problem
-            if (chars.Length == 0)
+            if (charCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -298,7 +298,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input just return 0, fixed doesn't like 0 length arrays
-            if (bytes.Length == 0)
+            if (count == 0)
                 return 0;
 
             // Just call pointer version
@@ -356,7 +356,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // If no input, return 0 & avoid fixed problem
-            if (bytes.Length == 0)
+            if (byteCount == 0)
                 return 0;
 
             // Just call pointer version
@@ -422,7 +422,7 @@ namespace System.Text
             Contract.EndContractBlock();
 
             // Avoid problems with empty input buffer
-            if (bytes.Length == 0) return String.Empty;
+            if (count == 0) return String.Empty;
 
             fixed (byte* pBytes = bytes)
                 return String.CreateStringFromEncoding(