diff --git a/pkg/registry/core/service/allocator/utils.go b/pkg/registry/core/service/allocator/utils.go index 4691f57a157..baf64506e09 100644 --- a/pkg/registry/core/service/allocator/utils.go +++ b/pkg/registry/core/service/allocator/utils.go @@ -16,49 +16,16 @@ limitations under the License. package allocator -import "math/big" +import ( + "math/big" + "math/bits" +) // countBits returns the number of set bits in n func countBits(n *big.Int) int { var count int = 0 for _, b := range n.Bytes() { - count += int(bitCounts[b]) + count += bits.OnesCount8(uint8(b)) } return count } - -// bitCounts is all of the bits counted for each number between 0-255 -var bitCounts = []int8{ - 0, 1, 1, 2, 1, 2, 2, 3, - 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, - 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, - 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, - 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, - 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, - 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, - 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, - 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, - 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, - 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, - 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, - 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, - 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, - 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, - 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, - 5, 6, 6, 7, 6, 7, 7, 8, -} diff --git a/pkg/registry/core/service/allocator/utils_test.go b/pkg/registry/core/service/allocator/utils_test.go index 5f87cb18317..4ba7dba8687 100644 --- a/pkg/registry/core/service/allocator/utils_test.go +++ b/pkg/registry/core/service/allocator/utils_test.go @@ -21,20 +21,6 @@ import ( "testing" ) -func TestBitCount(t *testing.T) { - for i, c := range bitCounts { - actual := 0 - for j := 0; j < 8; j++ { - if ((1 << uint(j)) & i) != 0 { - actual++ - } - } - if actual != int(c) { - t.Errorf("%d should have %d bits but recorded as %d", i, actual, c) - } - } -} - func TestCountBits(t *testing.T) { tests := []struct { n *big.Int