Skip to main content

Cache

Struct Cache 

Source
pub struct Cache { /* private fields */ }
Expand description

Fixed-capacity LRU cache keyed by PageId.

Implementations§

Source§

impl Cache

Source

pub fn new(capacity: usize) -> Self

Construct a cache with capacity pre-allocated frames.

capacity must be at least 1. Eviction kicks in once all frames are bound to a page.

Source

pub fn capacity(&self) -> usize

Number of frames in the cache.

Source

pub fn get(&mut self, id: PageId) -> Option<&Page>

Get a read-only reference to a cached page, if present, and mark it as most-recently-used. No allocation occurs.

Source

pub fn peek(&self, id: PageId) -> Option<&Page>

Read-only peek that does NOT touch the LRU order. Used by Pager::read_cache_or_main (which holds a shared &Pager borrow on the snapshot-read path); a mutating get would be a borrow-checker error there.

Source

pub fn get_mut(&mut self, id: PageId) -> Option<&mut Page>

Get a mutable reference to a cached page, marking it dirty and most-recently-used.

Source

pub fn insert( &mut self, id: PageId, buffer: Page, dirty: bool, ) -> Option<Evicted>

Insert (id, buffer) into the cache. If the cache is full, evicts the LRU frame; the returned Evicted is the caller’s responsibility to write back if dirty is set.

dirty controls whether the newly-inserted frame is considered modified. Pages loaded from disk should pass false; pages allocated fresh by alloc_page should pass true.

Source

pub fn evict(&mut self, id: PageId) -> Option<Evicted>

Force-evict id if present, returning its buffer + dirty flag. Used by free_page to invalidate the cache entry.

Source

pub fn drain_dirty(&mut self) -> impl Iterator<Item = (PageId, Page)> + '_

Iterate over (page_id, buffer) for every dirty bound frame, returning ownership of each buffer. Used at close to flush dirty pages. The iterator is bounded by self.capacity() (Rule 2).

Trait Implementations§

Source§

impl Debug for Cache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Cache

§

impl RefUnwindSafe for Cache

§

impl Send for Cache

§

impl Sync for Cache

§

impl Unpin for Cache

§

impl UnsafeUnpin for Cache

§

impl UnwindSafe for Cache

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V