Skip to main content

CpuLocalPointsToSet

Struct CpuLocalPointsToSet 

Source
pub struct CpuLocalPointsToSet<V> { /* private fields */ }
Expand description

CPU-local points-to resources that have not yet been distributed.

A newly allocated model returns all resources in this collection. CPU setup can split them into individual CpuLocalPointsTo resources and install each resource in the corresponding CPU core’s proof state.

Implementations§

Source§

impl<V> CpuLocalPointsToSet<V>

Source

pub closed spec fn id(&self) -> Loc

Identity of the corresponding CpuLocalAuth.

Source

pub open spec fn cpus(&self) -> Set<CpuId>

{ self@.dom() }

CPUs whose exclusive points-to resources are still held here.

Source

pub open spec fn contains(&self, cpu: CpuId) -> bool

{ self.cpus().contains(cpu) }

Whether this collection currently owns cpu’s points-to resource.

Source

pub proof fn tracked_take(tracked &mut self, cpu: CpuId) -> tracked res : CpuLocalPointsTo<V>

requires
old(self).contains(cpu),
ensures
final(self).id() == old(self).id(),
res.id() == final(self).id(),
res.cpu() == cpu,
res.value() == old(self)@[cpu],
final(self)@ == old(self)@.remove(cpu),
final(self).cpus() == old(self).cpus().remove(cpu),

Splits out exclusive ownership of one CPU’s entry.

Source

pub proof fn tracked_return(tracked &mut self, tracked points_to: CpuLocalPointsTo<V>)

requires
old(self).id() == points_to.id(),
!old(self).contains(points_to.cpu()),
ensures
final(self).id() == old(self).id(),
final(self)@ == old(self)@.insert(points_to.cpu(), points_to.value()),
final(self).cpus() == old(self).cpus().insert(points_to.cpu()),

Returns an individual points-to resource to this collection.

Trait Implementations§

Source§

impl<V> View for CpuLocalPointsToSet<V>

Source§

closed spec fn view(&self) -> Self::V

Source§

type V = Map<CpuId, V>

Auto Trait Implementations§

§

impl<V> Freeze for CpuLocalPointsToSet<V>

§

impl<V> RefUnwindSafe for CpuLocalPointsToSet<V>
where V: RefUnwindSafe,

§

impl<V> Send for CpuLocalPointsToSet<V>
where V: Send,

§

impl<V> Sync for CpuLocalPointsToSet<V>
where V: Sync,

§

impl<V> Unpin for CpuLocalPointsToSet<V>
where V: Unpin,

§

impl<V> UnsafeUnpin for CpuLocalPointsToSet<V>

§

impl<V> UnwindSafe for CpuLocalPointsToSet<V>
where V: UnwindSafe,

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.

§

impl<T, VERUS_SPEC__A> FromSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: From<T>,

§

fn obeys_from_spec() -> bool

§

fn from_spec(v: T) -> VERUS_SPEC__A

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.

§

impl<T, VERUS_SPEC__A> IntoSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: Into<T>,

§

fn obeys_into_spec() -> bool

§

fn into_spec(self) -> T

§

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

§

fn obeys_into_spec() -> bool

§

fn into_spec(self) -> U

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.
§

impl<T, VERUS_SPEC__A> TryFromSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: TryFrom<T>,

§

fn obeys_try_from_spec() -> bool

§

fn try_from_spec( v: T, ) -> Result<VERUS_SPEC__A, <VERUS_SPEC__A as TryFrom<T>>::Error>

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.
§

impl<T, VERUS_SPEC__A> TryIntoSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: TryInto<T>,

§

fn obeys_try_into_spec() -> bool

§

fn try_into_spec(self) -> Result<T, <VERUS_SPEC__A as TryInto<T>>::Error>

§

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

§

fn obeys_try_into_spec() -> bool

§

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

§

impl<A> SpecEq<&A> for A
where A: ?Sized,

§

impl<A> SpecEq<&mut A> for A
where A: ?Sized,

§

impl<A> SpecEq<A> for A
where A: ?Sized,

§

impl<A> SpecEq<Ghost<A>> for A

§

impl<A> SpecEq<Tracked<A>> for A