Struct vstd::atomic::PAtomicI8

source ·
pub struct PAtomicI8 { /* private fields */ }

Implementations§

source§

impl PAtomicI8

source

pub spec fn id(&self) -> int

source

pub const exec fn new(i: i8) -> (PAtomicI8, Tracked<PermissionI8>)

ensures
equal(
    res.1@.view(),
    PermissionDataI8 {
        patomic: res.0.id(),
        value: i,
    },
),
source

pub exec fn load(&self, verus_tmp_perm: Tracked<&PermissionI8>) -> i8

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

pub exec fn store(&self, verus_tmp_perm: Tracked<&mut PermissionI8>, v: i8)

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 PermissionI8>, current: i8, new: i8 ) -> Result<i8, i8>

requires
equal(self.id(), old(perm).view().patomic),
ensures
equal(self.id(), perm.view().patomic)
    && match ret {
        Result::Ok(r) => {
            current == old(perm).view().value && equal(perm.view().value, new)
                && equal(r, old(perm).view().value)
        }
        Result::Err(r) => {
            current != old(perm).view().value
                && 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 PermissionI8>, current: i8, new: i8 ) -> Result<i8, i8>

requires
equal(self.id(), old(perm).view().patomic),
ensures
equal(self.id(), perm.view().patomic)
    && match ret {
        Result::Ok(r) => {
            current == old(perm).view().value && 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 PermissionI8>, v: i8) -> i8

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, verus_tmp_perm: Tracked<PermissionI8>) -> i8

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

pub exec fn fetch_add_wrapping( &self, verus_tmp_perm: Tracked<&mut PermissionI8>, n: i8 ) -> i8

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 as int == wrapping_add_i8(old(perm).view().value as int, n as int),
source

pub exec fn fetch_sub_wrapping( &self, verus_tmp_perm: Tracked<&mut PermissionI8>, n: i8 ) -> i8

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 as int == wrapping_sub_i8(old(perm).view().value as int, n as int),
source

pub exec fn fetch_add(&self, verus_tmp_perm: Tracked<&mut PermissionI8>, n: i8) -> i8

requires
equal(self.id(), old(perm).view().patomic),
(<i8>::MIN as int) <= old(perm).view().value + n,
old(perm).view().value + n <= (<i8>::MAX as int),
ensures
equal(old(perm).view().value, ret),
perm.view().patomic == old(perm).view().patomic,
perm.view().value == old(perm).view().value + n,
source

pub exec fn fetch_sub(&self, verus_tmp_perm: Tracked<&mut PermissionI8>, n: i8) -> i8

requires
equal(self.id(), old(perm).view().patomic),
(<i8>::MIN as int) <= old(perm).view().value - n,
old(perm).view().value - n <= <i8>::MAX as int,
ensures
equal(old(perm).view().value, ret),
perm.view().patomic == old(perm).view().patomic,
perm.view().value == old(perm).view().value - n,
source

pub exec fn fetch_and(&self, verus_tmp_perm: Tracked<&mut PermissionI8>, n: i8) -> i8

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 == (old(perm).view().value & n),
source

pub exec fn fetch_or(&self, verus_tmp_perm: Tracked<&mut PermissionI8>, n: i8) -> i8

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 == (old(perm).view().value | n),
source

pub exec fn fetch_xor(&self, verus_tmp_perm: Tracked<&mut PermissionI8>, n: i8) -> i8

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 == (old(perm).view().value ^ n),
source

pub exec fn fetch_nand( &self, verus_tmp_perm: Tracked<&mut PermissionI8>, n: i8 ) -> i8

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 == !(old(perm).view().value & n),
source

pub exec fn fetch_max(&self, verus_tmp_perm: Tracked<&mut PermissionI8>, n: i8) -> i8

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
    == (if old(perm).view().value > n { old(perm).view().value } else { n }),
source

pub exec fn fetch_min(&self, verus_tmp_perm: Tracked<&mut PermissionI8>, n: i8) -> i8

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
    == (if old(perm).view().value < n { old(perm).view().value } else { n }),

Auto Trait Implementations§

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.