Struct vstd::atomic::PAtomicI64

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

Implementations§

source§

impl PAtomicI64

source

pub spec fn id(&self) -> int

source

pub const exec fn new(i: i64) -> res : (PAtomicI64, Tracked<PermissionI64>)

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

pub exec fn load(&self, Tracked(perm): Tracked<&PermissionI64>) -> ret : i64

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

pub exec fn store(&self, Tracked(perm): Tracked<&mut PermissionI64>, v: i64)

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 PermissionI64>, current: i64, new: i64 ) -> ret : Result<i64, i64>

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 PermissionI64>, current: i64, new: i64 ) -> ret : Result<i64, i64>

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, Tracked(perm): Tracked<&mut PermissionI64>, v: i64) -> ret : i64

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<PermissionI64>) -> ret : i64

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 PermissionI64>, n: i64 ) -> ret : i64

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

pub exec fn fetch_sub_wrapping( &self, verus_tmp_perm: Tracked<&mut PermissionI64>, n: i64 ) -> ret : i64

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

pub exec fn fetch_add( &self, verus_tmp_perm: Tracked<&mut PermissionI64>, n: i64 ) -> ret : i64

requires
equal(self.id(), old(perm).view().patomic),
(<i64>::MIN as int) <= old(perm).view().value + n,
old(perm).view().value + n <= (<i64>::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 PermissionI64>, n: i64 ) -> ret : i64

requires
equal(self.id(), old(perm).view().patomic),
(<i64>::MIN as int) <= old(perm).view().value - n,
old(perm).view().value - n <= <i64>::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 PermissionI64>, n: i64 ) -> ret : i64

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 PermissionI64>, n: i64 ) -> ret : i64

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 PermissionI64>, n: i64 ) -> ret : i64

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 PermissionI64>, n: i64 ) -> ret : i64

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 PermissionI64>, n: i64 ) -> ret : i64

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 PermissionI64>, n: i64 ) -> ret : i64

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.