align API

align

package

API reference for the align package.

Imports

(1)
F
function

TestUpDown

Parameters

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

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)
}