Use PopCount in DriveInfoInternal.Windows.cs. (#69279)
authorTheodore Tsirpanis <teo@tsirpanis.gr>
Fri, 13 May 2022 01:15:09 +0000 (04:15 +0300)
committerGitHub <noreply@github.com>
Fri, 13 May 2022 01:15:09 +0000 (18:15 -0700)
src/libraries/System.Private.CoreLib/src/System/IO/DriveInfoInternal.Windows.cs

index f632c4f..5239535 100644 (file)
@@ -2,6 +2,7 @@
 // The .NET Foundation licenses this file to you under the MIT license.
 
 using System.Diagnostics;
+using System.Numerics;
 
 namespace System.IO
 {
@@ -18,20 +19,13 @@ namespace System.IO
 
             // GetLogicalDrives returns a bitmask starting from
             // position 0 "A" indicating whether a drive is present.
-            // Loop over each bit, creating a string for each one
-            // that is set.
+            // Create a string for each bit that is set.
 
-            uint d = (uint)drives;
-            int count = 0;
-            while (d != 0)
-            {
-                if (((int)d & 1) != 0) count++;
-                d >>= 1;
-            }
+            int count = BitOperations.PopCount((uint)drives);
 
             string[] result = new string[count];
             Span<char> root = stackalloc char[] { 'A', ':', '\\' };
-            d = (uint)drives;
+            uint d = (uint)drives;
             count = 0;
             while (d != 0)
             {