PointsTowithDealloc

Struct PointsTowithDealloc 

Source
pub struct PointsTowithDealloc<T> {
    pub points_to: PointsTo<T>,
    pub dealloc: Option<Dealloc>,
}

Fields§

§points_to: PointsTo<T>§dealloc: Option<Dealloc>

Implementations§

Source§

impl<T> PointsTowithDealloc<T>

Source

pub open spec fn ptr(self) -> *mut T

{ self.points_to.ptr() }
Source

pub open spec fn addr(self) -> usize

{ self.ptr().addr() }
Source

pub open spec fn is_init(self) -> bool

{ self.points_to.is_init() }
Source

pub open spec fn is_uninit(self) -> bool

{ self.points_to.is_uninit() }
Source

pub open spec fn value(self) -> T

{ self.points_to.value() }
Source

pub open spec fn dealloc_aligned(self) -> bool

{
    match self.dealloc {
        Some(dealloc) => dealloc.align() == vstd::layout::align_of::<T>(),
        None => true,
    }
}
Source

pub proof fn tracked_borrow_points_to(tracked &self) -> tracked ret : &PointsTo<T>

Source

pub proof fn tracked_get_points_to(tracked self) -> tracked ret : PointsTo<T>

Source

pub proof fn new(tracked points_to: PointsTo<T>, tracked dealloc: Option<Dealloc>) -> tracked ret : Self

requires
match dealloc {
    Some(dealloc) => (
        &&& vstd::layout::size_of::<T>() > 0
        &&& valid_layout(size_of::<T>(), dealloc.align() as usize)
        &&& points_to.ptr().addr() == dealloc.addr()
        &&& points_to.ptr()@.provenance == dealloc.provenance()
        &&& dealloc.size() == vstd::layout::size_of::<T>()

    ),
    None => vstd::layout::size_of::<T>() == 0,
},
ensures
ret.inv(),
Source

pub proof fn new_non_zero_size(tracked points_to: PointsTo<T>, tracked dealloc: Dealloc) -> tracked ret : Self

requires
0 < vstd::layout::size_of::<T>(),
valid_layout(size_of::<T>(), dealloc.align() as usize),
points_to.ptr().addr() == dealloc.addr(),
points_to.ptr()@.provenance == dealloc.provenance(),
dealloc.size() == vstd::layout::size_of::<T>() as int,
dealloc.align() == vstd::layout::align_of::<T>(),
ensures
ret.inv(),
Source

pub proof fn new_zero_size(tracked points_to: PointsTo<T>) -> tracked ret : Self

requires
vstd::layout::size_of::<T>() == 0,
ensures
ret.inv(),
Source

pub proof fn into_raw(tracked self) -> tracked ret : (PointsToRaw, Option<Dealloc>)

requires
self.inv(),
self.is_uninit(),
ensures
match ret.1 {
    Some(dealloc) => (
        &&& vstd::layout::size_of::<T>() > 0
        &&& dealloc.addr() == self.addr()
        &&& dealloc.addr() as int % vstd::layout::align_of::<T>() as int == 0
        &&& dealloc.size() == vstd::layout::size_of::<T>() as int
        &&& dealloc.provenance() == ret.0.provenance()
        &&& ret.0.is_range(dealloc.addr() as int, vstd::layout::size_of::<T>() as int)

    ),
    None => (
        &&& vstd::layout::size_of::<T>() == 0

    ),
},

Trait Implementations§

Source§

impl<T> Inv for PointsTowithDealloc<T>

Source§

open spec fn inv(self) -> bool

{
    &&& self.points_to.ptr().addr() as int % vstd::layout::align_of::<T>() as int == 0
    &&& match self.dealloc {
        Some(dealloc) => (
            &&& vstd::layout::size_of::<T>() > 0
            &&& self.points_to.ptr().addr() == dealloc.addr()
            &&& self.points_to.ptr()@.provenance == dealloc.provenance()
            &&& dealloc.size() == vstd::layout::size_of::<T>()
            &&& valid_layout(size_of::<T>(), dealloc.align() as usize)

        ),
        None => vstd::layout::size_of::<T>() == 0,
    }

}

Auto Trait Implementations§

§

impl<T> Freeze for PointsTowithDealloc<T>

§

impl<T> RefUnwindSafe for PointsTowithDealloc<T>
where T: RefUnwindSafe,

§

impl<T> Send for PointsTowithDealloc<T>
where T: Send,

§

impl<T> Sync for PointsTowithDealloc<T>
where T: Sync,

§

impl<T> Unpin for PointsTowithDealloc<T>
where T: Unpin,

§

impl<T> UnwindSafe for PointsTowithDealloc<T>
where T: 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>