align
API
align
packageAPI reference for the align
package.
Imports
(1)
F
function
TestUpDown
Parameters
t
pkg/align/align_test.go:5-21
func TestUpDown(t *testing.T)
{
if got := Up[uint64](0, 4); got != 0 {
t.Fatalf("Up(0,4)=%d", got)
}
if got := Up[uint64](1, 4); got != 4 {
t.Fatalf("Up(1,4)=%d", got)
}
if got := Up[uint64](4, 4); got != 4 {
t.Fatalf("Up(4,4)=%d", got)
}
if got := Down[uint64](5, 4); got != 4 {
t.Fatalf("Down(5,4)=%d", got)
}
if got := Down[uintptr](uintptr(0x1234), 0x100); got != 0x1200 {
t.Fatalf("Down(0x1234,0x100)=0x%x", got)
}
}
F
function
TestPanicsOnInvalidAlign
Parameters
t
pkg/align/align_test.go:23-30
func TestPanicsOnInvalidAlign(t *testing.T)
{
defer func() {
if recover() == nil {
t.Fatal("expected panic")
}
}()
_ = Up[uint64](1, 3)
}
I
interface
Unsigned
Unsigned is a local type constraint for unsigned integers.
We intentionally avoid external dependencies (e.g. golang.org/x/exp/constraints)
to keep go-foundation stdlib-only.
pkg/align/align.go:7-9
type Unsigned interface
F
function
isPow2
Parameters
a
T
Returns
bool
pkg/align/align.go:11-13
func isPow2[T Unsigned](a T) bool
{
return a != 0 && (a&(a-1)) == 0
}
F
function
Up
Up aligns v up to the next multiple of a.
a must be a power of two.
Parameters
v
T
a
T
Returns
T
pkg/align/align.go:18-23
func Up[T Unsigned](v, a T) T
{
if !isPow2(a) {
panic("align: alignment must be a power of two")
}
return (v + (a - 1)) &^ (a - 1)
}
F
function
Down
Down aligns v down to the previous multiple of a.
a must be a power of two.
Parameters
v
T
a
T
Returns
T
pkg/align/align.go:28-33
func Down[T Unsigned](v, a T) T
{
if !isPow2(a) {
panic("align: alignment must be a power of two")
}
return v &^ (a - 1)
}