pub struct ResourceRef<'a, RA: ResourceAlgebra> { /* private fields */ }Implementations§
Source§impl<'a, RA: ResourceAlgebra> ResourceRef<'a, RA>
impl<'a, RA: ResourceAlgebra> ResourceRef<'a, RA>
Sourcepub proof fn validate(tracked &self)
pub proof fn validate(tracked &self)
ensures
self.value().valid(),Whenever we have a resource, that resource is valid.
See Resource::validate for more details
requires
self.loc() == other.loc(),ensuresout.loc() == self.loc(),incl(self.value(), out.value()) || self.value() == out.value(),incl(other.value(), out.value()) || other.value() == out.value(),This is useful when you have two (or more) shared resources and want to learn
that they agree, as you can combine this validate, e.g., x.join_shared(y).validate().
Sourcepub proof fn weaken(tracked &self, target: RA) -> tracked out : ResourceRef<'a, RA>
pub proof fn weaken(tracked &self, target: RA) -> tracked out : ResourceRef<'a, RA>
requires
incl(target, self.value()),ensuresout.loc() == self.loc(),out.value() == target,Extract a shared reference to a preceding element in the extension order from a shared reference.
Sourcepub proof fn duplicate_previous(tracked &self, value: RA) -> tracked out : Resource<RA>
pub proof fn duplicate_previous(tracked &self, value: RA) -> tracked out : Resource<RA>
requires
frame_preserving_update_opt(self.value(), RA::op(value, self.value())),ensuresout.loc() == self.loc(),out.value() == value,If x --> x · y is a frame-perserving update, and we have a shared reference to x,
we can create a resource to y
requires
self.loc() == other.loc(),conjunct_shared(Some(self.value()), Some(other.value()), Some(target)),ensuresout.loc() == self.loc(),out.value() == target,We can do a similar update to update_with_shared for non-deterministic updates
Auto Trait Implementations§
impl<'a, RA> Freeze for ResourceRef<'a, RA>
impl<'a, RA> RefUnwindSafe for ResourceRef<'a, RA>where
RA: RefUnwindSafe,
impl<'a, RA> Send for ResourceRef<'a, RA>where
RA: Sync,
impl<'a, RA> Sync for ResourceRef<'a, RA>where
RA: Sync,
impl<'a, RA> Unpin for ResourceRef<'a, RA>
impl<'a, RA> UnsafeUnpin for ResourceRef<'a, RA>
impl<'a, RA> UnwindSafe for ResourceRef<'a, RA>where
RA: RefUnwindSafe,
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
Source§impl<T, U> IntoSpecImpl<U> for Twhere
U: From<T>,
impl<T, U> IntoSpecImpl<U> for Twhere
U: From<T>,
Source§impl<T, VERUS_SPEC__A> TryFromSpec<T> for VERUS_SPEC__Awhere
VERUS_SPEC__A: TryFrom<T>,
impl<T, VERUS_SPEC__A> TryFromSpec<T> for VERUS_SPEC__Awhere
VERUS_SPEC__A: TryFrom<T>,
Source§exec fn obeys_try_from_spec() -> bool
exec fn obeys_try_from_spec() -> bool
Source§impl<T, VERUS_SPEC__A> TryIntoSpec<T> for VERUS_SPEC__Awhere
VERUS_SPEC__A: TryInto<T>,
impl<T, VERUS_SPEC__A> TryIntoSpec<T> for VERUS_SPEC__Awhere
VERUS_SPEC__A: TryInto<T>,
Source§exec fn obeys_try_into_spec() -> bool
exec fn obeys_try_into_spec() -> bool
Source§impl<T, U> TryIntoSpecImpl<U> for Twhere
U: TryFrom<T>,
impl<T, U> TryIntoSpecImpl<U> for Twhere
U: TryFrom<T>,
Source§open spec fn obeys_try_into_spec() -> bool
open spec fn obeys_try_into_spec() -> bool
{ <U as TryFromSpec<Self>>::obeys_try_from_spec() }