Review feedback
This commit is contained in:
1 parent
1ec2c0fb3f
commit
d551b6b0a8
3 files changed
+9
-9
No files matched your search
+1
-1
@@ -122,7 +122,7 @@ func (s *Space) biggestFreeRange(r address.Range) (biggest address.Range) {
|
||||
biggestSize := address.Count(0)
|
||||
s.walkFree(r, func(chunk address.Range) bool {
|
||||
if size := chunk.Size(); size >= biggestSize {
|
||||
chunk = chunk.BiggestPow2AlignedRange()
|
||||
chunk = chunk.BiggestCIDRRange()
|
||||
if size = chunk.Size(); size >= biggestSize {
|
||||
biggest = chunk
|
||||
biggestSize = size
|
||||
|
||||
@@ -35,7 +35,7 @@ func (r Range) AsCIDRString() string {
|
||||
return CIDR{Addr: r.Start, PrefixLen: prefixLen}.String()
|
||||
}
|
||||
|
||||
// return the highest bit set in a
|
||||
// return the highest bit set in v
|
||||
// algorithm from http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
|
||||
func msb(v Count) Count {
|
||||
v |= v >> 1
|
||||
@@ -47,7 +47,7 @@ func msb(v Count) Count {
|
||||
return Count((uint64(v) + 1) / 2)
|
||||
}
|
||||
|
||||
func (r Range) BiggestPow2AlignedRange() Range {
|
||||
func (r Range) BiggestCIDRRange() Range {
|
||||
sizeMsb := Offset(msb(r.Size()))
|
||||
maskedSize := Offset(r.Size()) & (sizeMsb - 1)
|
||||
maskedStart := Offset(r.Start) & (sizeMsb - 1)
|
||||
|
||||
@@ -20,17 +20,17 @@ func isPower2(x Count) bool {
|
||||
}
|
||||
|
||||
func TestBiggestPow2AlignedRange(t *testing.T) {
|
||||
require.Equal(t, NewRange(0, 1), NewRange(0, 1).BiggestPow2AlignedRange())
|
||||
require.Equal(t, NewRange(0, 2), NewRange(0, 3).BiggestPow2AlignedRange())
|
||||
require.Equal(t, NewRange(1, 1), NewRange(1, 2).BiggestPow2AlignedRange())
|
||||
require.Equal(t, NewRange(0, 0x40000000), NewRange(0, 0x7fffffff).BiggestPow2AlignedRange())
|
||||
require.Equal(t, NewRange(0xfffffffe, 1), NewRange(0xfffffffe, 1).BiggestPow2AlignedRange())
|
||||
require.Equal(t, NewRange(0, 1), NewRange(0, 1).BiggestCIDRRange())
|
||||
require.Equal(t, NewRange(1, 1), NewRange(1, 2).BiggestCIDRRange())
|
||||
require.Equal(t, NewRange(2, 2), NewRange(1, 3).BiggestCIDRRange())
|
||||
require.Equal(t, NewRange(0, 0x40000000), NewRange(0, 0x7fffffff).BiggestCIDRRange())
|
||||
require.Equal(t, NewRange(0xfffffffe, 1), NewRange(0xfffffffe, 1).BiggestCIDRRange())
|
||||
prop := func(start Address, size Offset) bool {
|
||||
if size > Offset(0xffffffff)-Offset(start) { // out of range
|
||||
return true
|
||||
}
|
||||
r := NewRange(start, size)
|
||||
result := r.BiggestPow2AlignedRange()
|
||||
result := r.BiggestCIDRRange()
|
||||
return r.Contains(result.Start) &&
|
||||
r.Contains(result.End-1) &&
|
||||
isPower2(result.Size()) &&
|
||||
|
||||
Reference in new issue
Block a user