Struct vstd::atomic::PAtomicPtr

source ·
pub struct PAtomicPtr<T> { /* private fields */ }

Implementations§

source§

impl<T> PAtomicPtr<T>

source

pub spec fn id(&self) -> int

source

pub const exec fn new(i: *mut T) -> res : (PAtomicPtr<T>, Tracked<PermissionPtr<T>>)

ensures
equal(
    res.1@.view(),
    PermissionDataPtr::<T> {
        patomic: res.0.id(),
        value: i,
    },
),
source

pub exec fn load(&self, Tracked(perm): Tracked<&PermissionPtr<T>>) -> ret : *mut T

requires
equal(self.id(), perm.view().patomic),
ensures
equal(perm.view().value, ret),
source

pub exec fn store(&self, Tracked(perm): Tracked<&mut PermissionPtr<T>>, v: *mut T)

requires
equal(self.id(), old(perm).view().patomic),
ensures
equal(perm.view().value, v) && equal(self.id(), perm.view().patomic),
source

pub exec fn compare_exchange( &self, verus_tmp_perm: Tracked<&mut PermissionPtr<T>>, current: *mut T, new: *mut T ) -> ret : Result<*mut T, *mut T>

requires
equal(self.id(), old(perm).view().patomic),
ensures
equal(self.id(), perm.view().patomic)
    && match ret {
        Result::Ok(r) => {
            current.view().addr == old(perm).view().value.view().addr
                && equal(perm.view().value, new) && equal(r, old(perm).view().value)
        }
        Result::Err(r) => {
            current.view().addr != old(perm).view().value.view().addr
                && equal(perm.view().value, old(perm).view().value)
                && equal(r, old(perm).view().value)
        }
    },
source

pub exec fn compare_exchange_weak( &self, verus_tmp_perm: Tracked<&mut PermissionPtr<T>>, current: *mut T, new: *mut T ) -> ret : Result<*mut T, *mut T>

requires
equal(self.id(), old(perm).view().patomic),
ensures
equal(self.id(), perm.view().patomic)
    && match ret {
        Result::Ok(r) => {
            current.view().addr == old(perm).view().value.view().addr
                && equal(perm.view().value, new) && equal(r, old(perm).view().value)
        }
        Result::Err(r) => {
            equal(perm.view().value, old(perm).view().value)
                && equal(r, old(perm).view().value)
        }
    },
source

pub exec fn swap( &self, verus_tmp_perm: Tracked<&mut PermissionPtr<T>>, v: *mut T ) -> ret : *mut T

requires
equal(self.id(), old(perm).view().patomic),
ensures
equal(perm.view().value, v) && equal(old(perm).view().value, ret)
    && equal(self.id(), perm.view().patomic),
source

pub exec fn into_inner(self, Tracked(perm): Tracked<PermissionPtr<T>>) -> ret : *mut T

requires
equal(self.id(), perm.view().patomic),
ensures
equal(perm.view().value, ret),
source§

impl<T> PAtomicPtr<T>

source

pub exec fn fetch_and( &self, verus_tmp_perm: Tracked<&mut PermissionPtr<T>>, n: usize ) -> ret : *mut T

requires
equal(self.id(), old(perm).view().patomic),
ensures
equal(old(perm).view().value, ret),
perm.view().patomic == old(perm).view().patomic,
perm.view().value@.addr == (old(perm).view().value@.addr & n),
perm.view().value@.provenance == old(perm).view().value@.provenance,
perm.view().value@.metadata == old(perm).view().value@.metadata,
source

pub exec fn fetch_xor( &self, verus_tmp_perm: Tracked<&mut PermissionPtr<T>>, n: usize ) -> ret : *mut T

requires
equal(self.id(), old(perm).view().patomic),
ensures
equal(old(perm).view().value, ret),
perm.view().patomic == old(perm).view().patomic,
perm.view().value@.addr == (old(perm).view().value@.addr ^ n),
perm.view().value@.provenance == old(perm).view().value@.provenance,
perm.view().value@.metadata == old(perm).view().value@.metadata,
source

pub exec fn fetch_or( &self, verus_tmp_perm: Tracked<&mut PermissionPtr<T>>, n: usize ) -> ret : *mut T

requires
equal(self.id(), old(perm).view().patomic),
ensures
equal(old(perm).view().value, ret),
perm.view().patomic == old(perm).view().patomic,
perm.view().value@.addr == (old(perm).view().value@.addr | n),
perm.view().value@.provenance == old(perm).view().value@.provenance,
perm.view().value@.metadata == old(perm).view().value@.metadata,

Auto Trait Implementations§

§

impl<T> !Freeze for PAtomicPtr<T>

§

impl<T> RefUnwindSafe for PAtomicPtr<T>

§

impl<T> Send for PAtomicPtr<T>

§

impl<T> Sync for PAtomicPtr<T>

§

impl<T> Unpin for PAtomicPtr<T>

§

impl<T> UnwindSafe for PAtomicPtr<T>
where T: RefUnwindSafe,

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>,

§

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>,

§

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.