diff options
Diffstat (limited to 'src/cached_inode.rs')
-rw-r--r-- | src/cached_inode.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/cached_inode.rs b/src/cached_inode.rs index 814c1aa..a4e8202 100644 --- a/src/cached_inode.rs +++ b/src/cached_inode.rs @@ -1,3 +1,4 @@ +use crate::disk::data_block::{Block, DataBlock}; use crate::disk::inode::Inode; pub struct CachedInode { @@ -5,3 +6,28 @@ pub struct CachedInode { pub index: usize, pub dirty: bool, } + +#[derive(Clone)] +pub struct CachedBlock<T: Block> { + pub block: T, + pub index: usize, + pub dirty: bool, +} + +impl<T: Block> CachedBlock<T> { + fn cast<U: Block>(&self) -> CachedBlock<U> { + unsafe { std::mem::transmute_copy(&self) } + } +} + +pub fn convert_mut<U: Block, T: Block>(input_block: &mut CachedBlock<U>) -> &mut CachedBlock<T> { + let ptr = input_block as *const CachedBlock<U> as *mut u8; + let block = ptr.cast::<CachedBlock<T>>(); + unsafe { &mut *block } +} + +pub fn convert<U: Block, T: Block>(input_block: &CachedBlock<U>) -> &CachedBlock<T> { + let ptr = input_block as *const CachedBlock<U> as *mut u8; + let block = ptr.cast::<CachedBlock<T>>(); + unsafe { &*block } +} |