Review feedback

This commit is contained in:
Bryan Boreham committed 2016-05-13 16:27:28 +01:00
1 parent 1ec2c0fb3f
commit d551b6b0a8
3 files changed
+9 -9

No files matched your search

+1 -1
View File
@@ -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
+2 -2
View File
@@ -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)
+6 -6
View File
@@ -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()) &&