enumstd.mem.Alignment[src]

Stored as a power-of-two.

Fields

@"1" = 0
@"2" = 1
@"4" = 2
@"8" = 3
@"16" = 4
@"32" = 5
@"64" = 6
_

Functions

FunctiontoByteUnits[src]

pub fn toByteUnits(a: Alignment) usize

Parameters

Source Code

Source code
pub fn toByteUnits(a: Alignment) usize {
    return @as(usize, 1) << @intFromEnum(a);
}

FunctionfromByteUnits[src]

pub fn fromByteUnits(n: usize) Alignment

Parameters

n: usize

Source Code

Source code
pub fn fromByteUnits(n: usize) Alignment {
    assert(std.math.isPowerOfTwo(n));
    return @enumFromInt(@ctz(n));
}

Functionorder[src]

pub fn order(lhs: Alignment, rhs: Alignment) std.math.Order

Parameters

Source Code

Source code
pub fn order(lhs: Alignment, rhs: Alignment) std.math.Order {
    return std.math.order(@intFromEnum(lhs), @intFromEnum(rhs));
}

Functioncompare[src]

pub fn compare(lhs: Alignment, op: std.math.CompareOperator, rhs: Alignment) bool

Source Code

Source code
pub fn compare(lhs: Alignment, op: std.math.CompareOperator, rhs: Alignment) bool {
    return std.math.compare(@intFromEnum(lhs), op, @intFromEnum(rhs));
}

Functionmax[src]

pub fn max(lhs: Alignment, rhs: Alignment) Alignment

Parameters

Source Code

Source code
pub fn max(lhs: Alignment, rhs: Alignment) Alignment {
    return @enumFromInt(@max(@intFromEnum(lhs), @intFromEnum(rhs)));
}

Functionmin[src]

pub fn min(lhs: Alignment, rhs: Alignment) Alignment

Parameters

Source Code

Source code
pub fn min(lhs: Alignment, rhs: Alignment) Alignment {
    return @enumFromInt(@min(@intFromEnum(lhs), @intFromEnum(rhs)));
}

Functionforward[src]

pub fn forward(a: Alignment, address: usize) usize

Return next address with this alignment.

Parameters

address: usize

Source Code

Source code
pub fn forward(a: Alignment, address: usize) usize {
    const x = (@as(usize, 1) << @intFromEnum(a)) - 1;
    return (address + x) & ~x;
}

Functionbackward[src]

pub fn backward(a: Alignment, address: usize) usize

Return previous address with this alignment.

Parameters

address: usize

Source Code

Source code
pub fn backward(a: Alignment, address: usize) usize {
    const x = (@as(usize, 1) << @intFromEnum(a)) - 1;
    return address & ~x;
}

Functioncheck[src]

pub fn check(a: Alignment, address: usize) bool

Return whether address is aligned to this amount.

Parameters

address: usize

Source Code

Source code
pub fn check(a: Alignment, address: usize) bool {
    return @ctz(address) >= @intFromEnum(a);
}

Source Code

Source code
pub const Alignment = enum(math.Log2Int(usize)) {
    @"1" = 0,
    @"2" = 1,
    @"4" = 2,
    @"8" = 3,
    @"16" = 4,
    @"32" = 5,
    @"64" = 6,
    _,

    pub fn toByteUnits(a: Alignment) usize {
        return @as(usize, 1) << @intFromEnum(a);
    }

    pub fn fromByteUnits(n: usize) Alignment {
        assert(std.math.isPowerOfTwo(n));
        return @enumFromInt(@ctz(n));
    }

    pub fn order(lhs: Alignment, rhs: Alignment) std.math.Order {
        return std.math.order(@intFromEnum(lhs), @intFromEnum(rhs));
    }

    pub fn compare(lhs: Alignment, op: std.math.CompareOperator, rhs: Alignment) bool {
        return std.math.compare(@intFromEnum(lhs), op, @intFromEnum(rhs));
    }

    pub fn max(lhs: Alignment, rhs: Alignment) Alignment {
        return @enumFromInt(@max(@intFromEnum(lhs), @intFromEnum(rhs)));
    }

    pub fn min(lhs: Alignment, rhs: Alignment) Alignment {
        return @enumFromInt(@min(@intFromEnum(lhs), @intFromEnum(rhs)));
    }

    /// Return next address with this alignment.
    pub fn forward(a: Alignment, address: usize) usize {
        const x = (@as(usize, 1) << @intFromEnum(a)) - 1;
        return (address + x) & ~x;
    }

    /// Return previous address with this alignment.
    pub fn backward(a: Alignment, address: usize) usize {
        const x = (@as(usize, 1) << @intFromEnum(a)) - 1;
        return address & ~x;
    }

    /// Return whether address is aligned to this amount.
    pub fn check(a: Alignment, address: usize) bool {
        return @ctz(address) >= @intFromEnum(a);
    }
}