Skip to main content

MemoryAddr

Trait MemoryAddr 

Source
pub trait MemoryAddr:
    Copy
    + From<usize>
    + Into<usize>
    + Ord {
Show 23 methods // Provided methods fn align_down<U>(self, align: U) -> Self where U: Into<usize> { ... } fn align_up<U>(self, align: U) -> Self where U: Into<usize> { ... } fn align_offset<U>(self, align: U) -> usize where U: Into<usize> { ... } fn is_aligned<U>(self, align: U) -> bool where U: Into<usize> { ... } fn align_down_4k(self) -> Self { ... } fn align_up_4k(self) -> Self { ... } fn align_offset_4k(self) -> usize { ... } fn is_aligned_4k(self) -> bool { ... } fn offset(self, offset: isize) -> Self { ... } fn wrapping_offset(self, offset: isize) -> Self { ... } fn offset_from(self, base: Self) -> isize { ... } fn add(self, rhs: usize) -> Self { ... } fn wrapping_add(self, rhs: usize) -> Self { ... } fn overflowing_add(self, rhs: usize) -> (Self, bool) { ... } fn checked_add(self, rhs: usize) -> Option<Self> { ... } fn sub(self, rhs: usize) -> Self { ... } fn wrapping_sub(self, rhs: usize) -> Self { ... } fn overflowing_sub(self, rhs: usize) -> (Self, bool) { ... } fn checked_sub(self, rhs: usize) -> Option<Self> { ... } fn sub_addr(self, rhs: Self) -> usize { ... } fn wrapping_sub_addr(self, rhs: Self) -> usize { ... } fn overflowing_sub_addr(self, rhs: Self) -> (usize, bool) { ... } fn checked_sub_addr(self, rhs: Self) -> Option<usize> { ... }
}
Expand description

A trait for memory address types.

Memory address types here include both physical and virtual addresses, as well as any other similar types like guest physical addresses in a hypervisor.

This trait is automatically implemented for any type that is Copy, From<usize>, Into<usize>, and Ord, providing a set of utility methods for address alignment and arithmetic.

Provided Methods§

Source

fn align_down<U>(self, align: U) -> Self
where U: Into<usize>,

Aligns the address downwards to the given alignment.

Source

fn align_up<U>(self, align: U) -> Self
where U: Into<usize>,

Aligns the address upwards to the given alignment.

Source

fn align_offset<U>(self, align: U) -> usize
where U: Into<usize>,

Returns the offset of the address within the given alignment.

Source

fn is_aligned<U>(self, align: U) -> bool
where U: Into<usize>,

Checks whether the address has the demanded alignment.

Source

fn align_down_4k(self) -> Self

Aligns the address downwards to 4096 (bytes).

Source

fn align_up_4k(self) -> Self

Aligns the address upwards to 4096 (bytes).

Source

fn align_offset_4k(self) -> usize

Returns the offset of the address within a 4K-sized page.

Source

fn is_aligned_4k(self) -> bool

Checks whether the address is 4K-aligned.

Source

fn offset(self, offset: isize) -> Self

Adds a given offset to the address to get a new address.

§Panics

Panics if the result overflows.

Source

fn wrapping_offset(self, offset: isize) -> Self

Adds a given offset to the address to get a new address.

Unlike offset, this method always wraps around on overflow.

Source

fn offset_from(self, base: Self) -> isize

Gets the distance between two addresses.

§Panics

Panics if the result is not representable by isize.

Source

fn add(self, rhs: usize) -> Self

Adds a given unsigned offset to the address to get a new address.

This method is similar to offset, but it takes an unsigned offset.

§Panics

Panics if the result overflows.

Source

fn wrapping_add(self, rhs: usize) -> Self

Adds a given unsigned offset to the address to get a new address.

Unlike add, this method always wraps around on overflow.

Source

fn overflowing_add(self, rhs: usize) -> (Self, bool)

Adds a given unsigned offset to the address to get a new address.

Unlike add, this method returns a tuple of the new address and a boolean indicating whether the addition has overflowed.

Source

fn checked_add(self, rhs: usize) -> Option<Self>

Adds a given unsigned offset to the address to get a new address.

Unlike add, this method returns None on overflow.

Source

fn sub(self, rhs: usize) -> Self

Subtracts a given unsigned offset from the address to get a new address.

This method is similar to offset(-rhs), but it takes an unsigned offset.

§Panics

Panics if the result overflows.

Source

fn wrapping_sub(self, rhs: usize) -> Self

Subtracts a given unsigned offset from the address to get a new address.

Unlike sub, this method always wraps around on overflowed.

Source

fn overflowing_sub(self, rhs: usize) -> (Self, bool)

Subtracts a given unsigned offset from the address to get a new address.

Unlike sub, this method returns a tuple of the new address and a boolean indicating whether the subtraction has overflowed.

Source

fn checked_sub(self, rhs: usize) -> Option<Self>

Subtracts a given unsigned offset from the address to get a new address.

Unlike sub, this method returns None on overflow.

Source

fn sub_addr(self, rhs: Self) -> usize

Subtracts another address from the address to get the offset between them.

§Panics

Panics if the result overflows.

Source

fn wrapping_sub_addr(self, rhs: Self) -> usize

Subtracts another address from the address to get the offset between them.

Unlike sub_addr, this method always wraps around on overflow.

Source

fn overflowing_sub_addr(self, rhs: Self) -> (usize, bool)

Subtracts another address from the address to get the offset between them.

Unlike sub_addr, this method returns a tuple of the offset and a boolean indicating whether the subtraction has overflowed.

Source

fn checked_sub_addr(self, rhs: Self) -> Option<usize>

Subtracts another address from the address to get the offset between them.

Unlike sub_addr, this method returns None on overflow.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<T> MemoryAddr for T
where T: Copy + From<usize> + Into<usize> + Ord,

Implement the MemoryAddr trait for any type that is Copy, From<usize>, Into<usize>, and Ord.