pub struct MetaRegionOwners {
pub slots: Map<usize, PointsTo<MetaSlot>>,
pub dropped_slots: Map<usize, PointsTo<MetaSlot>>,
pub slot_owners: Map<usize, MetaSlotOwner>,
}Fields§
§slots: Map<usize, PointsTo<MetaSlot>>§dropped_slots: Map<usize, PointsTo<MetaSlot>>§slot_owners: Map<usize, MetaSlotOwner>Implementations§
Source§impl MetaRegionOwners
impl MetaRegionOwners
Sourcepub open spec fn ref_count(self, i: usize) -> res : u64
pub open spec fn ref_count(self, i: usize) -> res : u64
recommends
self.inv(),i < max_meta_slots() as usize,{ self.slot_owners[i].ref_count.value() }Sourcepub open spec fn paddr_range_in_region(self, range: Range<Paddr>) -> bool
pub open spec fn paddr_range_in_region(self, range: Range<Paddr>) -> bool
recommends
self.inv(),range.start < range.end < MAX_PADDR(),{
forall |paddr: Paddr| {
(range.start <= paddr < range.end && paddr % PAGE_SIZE() == 0)
==> self.slots.contains_key(frame_to_index_spec(paddr))
}
}Sourcepub open spec fn paddr_range_in_dropped_region(self, range: Range<Paddr>) -> bool
pub open spec fn paddr_range_in_dropped_region(self, range: Range<Paddr>) -> bool
recommends
self.inv(),range.start < range.end < MAX_PADDR(),{
forall |paddr: Paddr| {
(range.start <= paddr < range.end && paddr % PAGE_SIZE() == 0)
==> !self.slots.contains_key(frame_to_index_spec(paddr))
&& self.dropped_slots.contains_key(frame_to_index_spec(paddr))
}
}Sourcepub open spec fn paddr_range_not_in_region(self, range: Range<Paddr>) -> bool
pub open spec fn paddr_range_not_in_region(self, range: Range<Paddr>) -> bool
recommends
self.inv(),range.start < range.end < MAX_PADDR(),{
forall |paddr: Paddr| {
(range.start <= paddr < range.end && paddr % PAGE_SIZE() == 0)
==> !self.slots.contains_key(frame_to_index_spec(paddr))
&& !self.dropped_slots.contains_key(frame_to_index_spec(paddr))
}
}Sourcepub proof fn inv_implies_correct_addr(self, paddr: usize)
pub proof fn inv_implies_correct_addr(self, paddr: usize)
requires
paddr < MAX_PADDR(),paddr % PAGE_SIZE() == 0,self.inv(),ensuresself.slot_owners.contains_key(frame_to_index_spec(paddr) as usize),Trait Implementations§
Source§impl Inv for MetaRegionOwners
impl Inv for MetaRegionOwners
Source§open spec fn inv(self) -> bool
open spec fn inv(self) -> bool
{
&&& self.slots.dom().finite()
&&& {
forall |i: usize| {
i < max_meta_slots() <==> #[trigger] self.slot_owners.contains_key(i)
}
}
&&& {
forall |i: usize| #[trigger] self.slots.contains_key(i) ==> i < max_meta_slots()
}
&&& {
forall |i: usize| {
#[trigger] self.dropped_slots.contains_key(i) ==> i < max_meta_slots()
}
}
&&& {
forall |i: usize| {
#[trigger] self.slot_owners.contains_key(i) ==> self.slot_owners[i].inv()
}
}
&&& {
forall |i: usize| {
#[trigger] self.slots.contains_key(i)
==> {
&&& self.slots[i].is_init()
&&& self.slots[i].addr() == meta_addr(i)
&&& self.slots[i].value().wf(self.slot_owners[i])
&&& self.slot_owners[i].self_addr == self.slots[i].addr()
&&& !self.dropped_slots.contains_key(i)
}
}
}
&&& {
forall |i: usize| {
#[trigger] self.dropped_slots.contains_key(i)
==> {
&&& self.dropped_slots[i].is_init()
&&& self.dropped_slots[i].addr() == meta_addr(i)
&&& self.dropped_slots[i].value().wf(self.slot_owners[i])
&&& self.slot_owners[i].self_addr == self.dropped_slots[i].addr()
&&& !self.slots.contains_key(i)
}
}
}
}Source§impl InvView for MetaRegionOwners
impl InvView for MetaRegionOwners
Source§proof fn view_preserves_inv(self)
proof fn view_preserves_inv(self)
Source§impl View for MetaRegionOwners
impl View for MetaRegionOwners
Auto Trait Implementations§
impl Freeze for MetaRegionOwners
impl !RefUnwindSafe for MetaRegionOwners
impl Send for MetaRegionOwners
impl Sync for MetaRegionOwners
impl Unpin for MetaRegionOwners
impl UnwindSafe for MetaRegionOwners
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more