Skip to main content

reddb_engine/storage/
page_store.rs

1//! Page operations used by the shared B-tree and overflow algorithms.
2use super::page::{Page, PageType};
3use super::pager::{Pager, PagerError, WalBarrier};
4use reddb_file::VfsFile;
5
6pub trait PageStore {
7    fn read_page(&self, page_id: u32) -> Result<Page, PagerError>;
8    fn write_page(&self, page_id: u32, page: Page) -> Result<(), PagerError>;
9    fn allocate_page(&self, page_type: PageType) -> Result<Page, PagerError>;
10    fn free_page(&self, page_id: u32) -> Result<(), PagerError>;
11    fn page_count(&self) -> Result<u32, PagerError>;
12    fn prefetch_hint(&self, _page_id: u32) {}
13}
14
15impl<F: VfsFile, W: WalBarrier> PageStore for Pager<F, W> {
16    fn read_page(&self, id: u32) -> Result<Page, PagerError> {
17        self.read_page(id)
18    }
19    fn write_page(&self, id: u32, page: Page) -> Result<(), PagerError> {
20        self.write_page(id, page)
21    }
22    fn allocate_page(&self, kind: PageType) -> Result<Page, PagerError> {
23        self.allocate_page(kind)
24    }
25    fn free_page(&self, id: u32) -> Result<(), PagerError> {
26        self.free_page(id)
27    }
28    fn page_count(&self) -> Result<u32, PagerError> {
29        self.page_count()
30    }
31}