[][src]Struct cannyls::block::BlockSize

pub struct BlockSize(_);

StorageNonVolatileMemoryのブロックサイズを表現するための構造体.

"ブロック"は、I/Oの最小単位であり、読み書き対象の領域およびその際に使用するバッファは、 BlockSizeによって指定された境界にアライメントされている必要がある.

指定されたサイズのブロック境界にアライメントを行うための補助メソッド群も提供している.

Methods

impl BlockSize[src]

pub const MIN: u16[src]

許容されるブロックサイズの最小値.

全てのブロックサイズは、この値の倍数である必要がある.

またBlockSize::default()で使われる値でもある.

pub fn min() -> Self[src]

許容可能な最小のブロックサイズを持つBlockSizeインスタンスを返す.

Examples

use cannyls::block::BlockSize;

assert_eq!(BlockSize::min().as_u16(), BlockSize::MIN);

pub fn new(block_size: u16) -> Result<Self>[src]

指定された値のブロックサイズを表現するBlockSizeインスタンスを生成する.

Errors

以下の場合には、種類がErrorKind::InvalidInputのエラーが返される:

  • block_sizeBlockSize::MIN未満
  • block_sizeBlockSize::MINの倍数ではない

Examples

use cannyls::ErrorKind;
use cannyls::block::BlockSize;

assert_eq!(BlockSize::new(512).ok().map(|a| a.as_u16()), Some(512));
assert_eq!(BlockSize::new(4096).ok().map(|a| a.as_u16()), Some(4096));

assert_eq!(BlockSize::new(256).err().map(|e| *e.kind()), Some(ErrorKind::InvalidInput));
assert_eq!(BlockSize::new(513).err().map(|e| *e.kind()), Some(ErrorKind::InvalidInput));

pub fn ceil_align(self, position: u64) -> u64[src]

指定位置より後方の最初のブロックサイズ位置を返す.

Examples

use cannyls::block::BlockSize;

let block_size = BlockSize::new(512).unwrap();
assert_eq!(block_size.ceil_align(0), 0);
assert_eq!(block_size.ceil_align(1), 512);
assert_eq!(block_size.ceil_align(512), 512);

pub fn floor_align(self, position: u64) -> u64[src]

指定位置より前方の最初のブロックサイズ位置を返す.

Examples

use cannyls::block::BlockSize;

let block_size = BlockSize::new(512).unwrap();
assert_eq!(block_size.floor_align(0), 0);
assert_eq!(block_size.floor_align(1), 0);
assert_eq!(block_size.floor_align(512), 512);

pub fn as_u16(self) -> u16[src]

ブロックサイズ値をu16に変換して返す.

pub fn contains(self, other: BlockSize) -> bool[src]

このブロックサイズがotherを包含しているかを確認する.

"包含している"とは「selfのブロックサイズがotherのブロックサイズの倍数」であることを意味する.

Examples

use cannyls::block::BlockSize;

let block_size = BlockSize::new(2048).unwrap();
assert!(block_size.contains(BlockSize::new(512).unwrap()));
assert!(block_size.contains(BlockSize::new(1024).unwrap()));
assert!(!block_size.contains(BlockSize::new(1536).unwrap()));

pub fn is_aligned(self, position: u64) -> bool[src]

指定位置がブロックサイズ境界に沿っているかどうかを判定する.

Examples

use cannyls::block::BlockSize;

let block_size = BlockSize::new(512).unwrap();
assert!(block_size.is_aligned(0));
assert!(block_size.is_aligned(512));
assert!(block_size.is_aligned(1024));

assert!(!block_size.is_aligned(511));
assert!(!block_size.is_aligned(513));

Trait Implementations

impl Clone for BlockSize[src]

impl Copy for BlockSize[src]

impl Debug for BlockSize[src]

impl Default for BlockSize[src]

impl Eq for BlockSize[src]

impl Hash for BlockSize[src]

impl Ord for BlockSize[src]

impl PartialEq<BlockSize> for BlockSize[src]

impl PartialOrd<BlockSize> for BlockSize[src]

impl StructuralEq for BlockSize[src]

impl StructuralPartialEq for BlockSize[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> SendSyncUnwindSafe for T where
    T: Send + Sync + UnwindSafe + ?Sized
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.