Struct vstd::atomic::PAtomicPtr
source · pub struct PAtomicPtr<T> { /* private fields */ }
Implementations§
source§impl<T> PAtomicPtr<T>
impl<T> PAtomicPtr<T>
sourcepub const exec fn new(i: *mut T) -> res : (PAtomicPtr<T>, Tracked<PermissionPtr<T>>)
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,
},
),
sourcepub exec fn load(&self, Tracked(perm): Tracked<&PermissionPtr<T>>) -> ret : *mut T
pub exec fn load(&self, Tracked(perm): Tracked<&PermissionPtr<T>>) -> ret : *mut T
requires
equal(self.id(), perm.view().patomic),
ensuresequal(perm.view().value, ret),
sourcepub exec fn store(&self, Tracked(perm): Tracked<&mut PermissionPtr<T>>, v: *mut T)
pub exec fn store(&self, Tracked(perm): Tracked<&mut PermissionPtr<T>>, v: *mut T)
requires
equal(self.id(), old(perm).view().patomic),
ensuresequal(perm.view().value, v) && equal(self.id(), perm.view().patomic),
sourcepub exec fn compare_exchange(
&self,
verus_tmp_perm: Tracked<&mut PermissionPtr<T>>,
current: *mut T,
new: *mut T
) -> ret : Result<*mut T, *mut T>
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),
ensuresequal(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)
}
},
sourcepub 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>
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),
ensuresequal(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)
}
},
sourcepub exec fn swap(
&self,
verus_tmp_perm: Tracked<&mut PermissionPtr<T>>,
v: *mut T
) -> ret : *mut T
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),
ensuresequal(perm.view().value, v) && equal(old(perm).view().value, ret)
&& equal(self.id(), perm.view().patomic),
sourcepub exec fn into_inner(self, Tracked(perm): Tracked<PermissionPtr<T>>) -> ret : *mut T
pub exec fn into_inner(self, Tracked(perm): Tracked<PermissionPtr<T>>) -> ret : *mut T
requires
equal(self.id(), perm.view().patomic),
ensuresequal(perm.view().value, ret),
source§impl<T> PAtomicPtr<T>
impl<T> PAtomicPtr<T>
sourcepub exec fn fetch_and(
&self,
verus_tmp_perm: Tracked<&mut PermissionPtr<T>>,
n: usize
) -> ret : *mut T
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),
ensuresequal(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,
sourcepub exec fn fetch_xor(
&self,
verus_tmp_perm: Tracked<&mut PermissionPtr<T>>,
n: usize
) -> ret : *mut T
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),
ensuresequal(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,
sourcepub exec fn fetch_or(
&self,
verus_tmp_perm: Tracked<&mut PermissionPtr<T>>,
n: usize
) -> ret : *mut T
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),
ensuresequal(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> 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