[][src]Trait cannyls::nvm::NonVolatileMemory

pub trait NonVolatileMemory: Sized + Read + Write + Seek {
    fn sync(&mut self) -> Result<()>;
fn position(&self) -> u64;
fn capacity(&self) -> u64;
fn block_size(&self) -> BlockSize;
fn split(self, position: u64) -> Result<(Self, Self)>; fn convert_to_offset(&self, pos: SeekFrom) -> Result<u64> { ... }
fn aligned_write_all<F>(&mut self, f: F) -> Result<()>
    where
        F: FnOnce(&mut Vec<u8>) -> Result<()>
, { ... }
fn aligned_read_bytes(&mut self, size: usize) -> Result<AlignedBytes> { ... } }

不揮発性メモリを表すトレイト.

"不揮発性メモリ"は「永続化可能なバイト列(領域)」を意味し、lump群を保存するために使用される.

読み書きの際には、位置およびサイズ、がブロック境界にアライメントされている必要がある.

このトレイト自体は汎用的なインタフェースを提供しているが、 実装は、読み書きされるデータはlusf形式に即したものである、ということを想定しても構わない. (e.g., lusfのヘッダからキャパシティ情報を取得する)

Required methods

fn sync(&mut self) -> Result<()>

メモリの内容を、物理デバイスに同期する.

内部的にバッファ管理等を行っておらず、常に内容が同期されている場合には、 このメソッド内で特に何かを行う必要はない。

fn position(&self) -> u64

読み書き用カーソルの現在位置を返す.

fn capacity(&self) -> u64

メモリの容量(バイト単位)を返す.

fn block_size(&self) -> BlockSize

このインスタンスのブロックサイズを返す.

利用者は、ブロックサイズに揃うように、読み書き時のアライメントを行う必要がある.

fn split(self, position: u64) -> Result<(Self, Self)>

メモリを指定位置で分割する.

Errors

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

  • 指定位置が容量を超えている
  • positionがブロック境界ではない
Loading content...

Provided methods

fn convert_to_offset(&self, pos: SeekFrom) -> Result<u64>

SeekFrom形式で指定された位置を、開始地点からのオフセットに変換する.

Errors

「指定位置が容量を超えている」ないし「0未満」の場合には、 種類がErrorKind::InvalidInputのエラーが返される.

fn aligned_write_all<F>(&mut self, f: F) -> Result<()> where
    F: FnOnce(&mut Vec<u8>) -> Result<()>, 

このインスタンスが指定するブロック境界へのアライメントを保証した書き込みを行う.

fの引数(一時バッファ)に対して書き込まれたデータは、その後AlignedBytesにコピーされた上で、 実際のNVMに書き出される.

なお一時バッファの末尾から、次のブロック境界までは、 任意のバイト列で埋められるので、注意が必要(i.e., 書き込み先の既存データは上書きされる).

fn aligned_read_bytes(&mut self, size: usize) -> Result<AlignedBytes>

このインスタンスが指定するブロック境界へのアライメントを保証した上で、指定サイズ分のバイト列を読み込む.

Loading content...

Implementors

impl NonVolatileMemory for FileNvm[src]

impl NonVolatileMemory for MemoryNvm[src]

impl NonVolatileMemory for SharedMemoryNvm[src]

Loading content...