LogicalBlockAddress

Struct LogicalBlockAddress 

Source
#[repr(transparent)]
pub struct LogicalBlockAddress(NonZeroU64);
Expand description

Represents a logical block address (LBA) on disk.

This structure stores the block index used to locate data blocks on a physical storage device. The actual size of a block depends on the filesystem’s configuration.

Tuple Fields§

§0: NonZeroU64

Implementations§

Source§

impl LogicalBlockAddress

Source

pub const fn new(n: u64) -> Option<Self>

Creates a LogicalBlockAddress if the given value is not zero.

Source

pub const fn into_sector(self) -> Sector

Converts a logical block address (LBA) to a sector number.

In the Fast File System (FFS), logical blocks are 4 KiB (0x1000) in size, while sectors are 512 bytes. Since LBA numbering starts at 1 (with 0 being invalid), this function calculates the corresponding sector.

§Returns
  • A Sector corresponding to the given logical block.
Source

pub fn into_bitmap_lba_offset( self, ffs: &FastFileSystemInner, ) -> Option<(LogicalBlockAddress, usize)>

Converts this logical block address into the corresponding location in the block allocation bitmap.

§Arguments
  • fs: Reference to the file system’s internal metadata layout.
§Returns
  • Some((lba, index)): if the block address is valid, which includes:
    • lba: the logical block address of the bitmap block that tracks this data block.
    • index: the index within the bitmap block where the relevant bit resides.
  • None: if the logical block address is out of bounds or outside the data region.
Source

pub fn into_u64(&self) -> u64

Returns the contained value as a u64.

Trait Implementations§

Source§

impl Add<usize> for LogicalBlockAddress

Source§

type Output = LogicalBlockAddress

The resulting type after applying the + operator.
Source§

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

Performs the + operation. Read more
Source§

impl Clone for LogicalBlockAddress

Source§

fn clone(&self) -> LogicalBlockAddress

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LogicalBlockAddress

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Ord for LogicalBlockAddress

Source§

fn cmp(&self, other: &LogicalBlockAddress) -> Ordering

This method returns an [Ordering] between self and other. Read more
1.21.0§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for LogicalBlockAddress

Source§

fn eq(&self, other: &LogicalBlockAddress) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for LogicalBlockAddress

Source§

fn partial_cmp(&self, other: &LogicalBlockAddress) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Step for LogicalBlockAddress

Source§

fn steps_between(start: &Self, end: &Self) -> (usize, Option<usize>)

🔬This is a nightly-only experimental API. (step_trait)
Returns the bounds on the number of successor steps required to get from start to end like [Iterator::size_hint()][Iterator::size_hint()]. Read more
Source§

fn forward_checked(start: Self, count: usize) -> Option<Self>

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the successor of self count times. Read more
Source§

fn backward_checked(start: Self, count: usize) -> Option<Self>

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the predecessor of self count times. Read more
§

fn forward(start: Self, count: usize) -> Self

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the successor of self count times. Read more
§

unsafe fn forward_unchecked(start: Self, count: usize) -> Self

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the successor of self count times. Read more
§

fn backward(start: Self, count: usize) -> Self

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the predecessor of self count times. Read more
§

unsafe fn backward_unchecked(start: Self, count: usize) -> Self

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the predecessor of self count times. Read more
Source§

impl Copy for LogicalBlockAddress

Source§

impl Eq for LogicalBlockAddress

Source§

impl StructuralPartialEq for LogicalBlockAddress

Auto Trait Implementations§

§

impl Freeze for LogicalBlockAddress

§

impl RefUnwindSafe for LogicalBlockAddress

§

impl Send for LogicalBlockAddress

§

impl Sync for LogicalBlockAddress

§

impl Unpin for LogicalBlockAddress

§

impl UnwindSafe for LogicalBlockAddress

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.