Struct rustdb::compact::CompactFile
source · [−]Expand description
CompactFile stores logical pages in smaller regions of backing storage.
Each logical page has a fixed size “starter page”.
A logical page that does not fit in the “starter page” has 1 or more “extension pages”.
Each extension page starts with it’s containing logical page number ( to allow extension pages to be relocated as required ).
When a new extension page is needed, it is allocated from the end of the file.
When an extension page is freed, the last extension page in the file is relocated to fill it.
If the starter page array needs to be enlarged, the first extension page is relocated to the end of the file.
File layout: file header | starter pages | extension pages.
Layout of starter page: 2 byte logical page size | array of 8 byte page numbers | user data | unused data.
Note: for a free logical page a link to the next free logical page is stored after the page size, then a special value.
Layout of extension page: 8 byte logical page number | user data | unused data.
Fields
stg: Box<dyn Storage>
Underlying storage.
Implementations
sourceimpl CompactFile
impl CompactFile
sourcepub fn new(stg: Box<dyn Storage>, sp_size: usize, ep_size: usize) -> Self
pub fn new(stg: Box<dyn Storage>, sp_size: usize, ep_size: usize) -> Self
Construct a new CompactFile.
sourcepub fn alloc_page(&mut self) -> u64
pub fn alloc_page(&mut self) -> u64
Allocate logical page number. Pages are numbered 0,1,2…
Auto Trait Implementations
impl !RefUnwindSafe for CompactFile
impl Send for CompactFile
impl Sync for CompactFile
impl Unpin for CompactFile
impl !UnwindSafe for CompactFile
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more