DeepModel

Trait DeepModel 

Source
pub trait DeepModel {
    type DeepModelTy;

    // Required method
    fn deep_model(self) -> Self::DeepModelTy;
}
Expand description

The deep model corresponds to the model used for specifying operations such as equality, hash function or ordering, which are computed deeply in a data structure. Typically, such a model recursively calls deep models of inner types.

Required Associated Types§

Required Methods§

Source

fn deep_model(self) -> Self::DeepModelTy

Implementations on Foreign Types§

Source§

impl DeepModel for Ordering

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

self

Source§

type DeepModelTy = Ordering

Source§

impl DeepModel for bool

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

self

Source§

type DeepModelTy = bool

Source§

impl DeepModel for char

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for i8

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for i16

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for i32

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for i64

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for i128

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for isize

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for u8

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for u16

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for u32

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for u64

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for u128

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for ()

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { () }

Source§

type DeepModelTy = ()

Source§

impl DeepModel for usize

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { self@ }

Source§

type DeepModelTy = Int

Source§

impl DeepModel for Duration

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

self.view()

Source§

type DeepModelTy = Int

Source§

impl DeepModel for Instant

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

self.view()

Source§

type DeepModelTy = Int

Source§

impl DeepModel for BigRational

Available on creusot only.
Source§

fn deep_model(self) -> Self::DeepModelTy

(opaque)

Source§

type DeepModelTy = Real

Source§

impl<A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (A, Z, Y, X, W, V, U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<A as DeepModel>::DeepModelTy, <Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Source§

impl<B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (B, A, Z, Y, X, W, V, U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<B as DeepModel>::DeepModelTy, <A as DeepModel>::DeepModelTy, <Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Source§

impl<C: DeepModel, B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (C, B, A, Z, Y, X, W, V, U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<C as DeepModel>::DeepModelTy, <B as DeepModel>::DeepModelTy, <A as DeepModel>::DeepModelTy, <Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Source§

impl<D: DeepModel, C: DeepModel, B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (D, C, B, A, Z, Y, X, W, V, U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<D as DeepModel>::DeepModelTy, <C as DeepModel>::DeepModelTy, <B as DeepModel>::DeepModelTy, <A as DeepModel>::DeepModelTy, <Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Source§

impl<E: DeepModel, D: DeepModel, C: DeepModel, B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (E, D, C, B, A, Z, Y, X, W, V, U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<E as DeepModel>::DeepModelTy, <D as DeepModel>::DeepModelTy, <C as DeepModel>::DeepModelTy, <B as DeepModel>::DeepModelTy, <A as DeepModel>::DeepModelTy, <Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Source§

impl<T: DeepModel + ?Sized> DeepModel for &T

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

(*self).deep_model()

Source§

type DeepModelTy = <T as DeepModel>::DeepModelTy

Source§

impl<T: DeepModel + ?Sized> DeepModel for &mut T

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

(*self).deep_model()

Source§

type DeepModelTy = <T as DeepModel>::DeepModelTy

Source§

impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Box<T, A>

Available on crate feature nightly only.
Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

Box::new((*self).deep_model())

Source§

type DeepModelTy = Box<<T as DeepModel>::DeepModelTy>

Source§

impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Rc<T, A>

Available on crate feature nightly only.
Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { *self.view().deep_model() }

Source§

type DeepModelTy = <T as DeepModel>::DeepModelTy

Source§

impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Arc<T, A>

Available on crate feature nightly only.
Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { *self.view().deep_model() }

Source§

type DeepModelTy = <T as DeepModel>::DeepModelTy

Source§

impl<T: DeepModel> DeepModel for Bound<T>

Source§

impl<T: DeepModel> DeepModel for Option<T>

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

match self {
    Some(t) => Some(t.deep_model()),
    None => None,
}
Source§

type DeepModelTy = Option<<T as DeepModel>::DeepModelTy>

Source§

impl<T: DeepModel> DeepModel for [T]

Source§

fn deep_model(self) -> Self::DeepModelTy

(opaque)

ensures

(&self)@.len() == result.len()

ensures

forall<i> 0 <= i && i < result.len() ==> result[i] == (&self)[i].deep_model()
Source§

type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>

Source§

impl<T: DeepModel> DeepModel for (T,)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<T as DeepModel>::DeepModelTy,)

Source§

impl<T: DeepModel> DeepModel for Reverse<T>

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { Reverse(self.0.deep_model()) }

Source§

type DeepModelTy = Reverse<<T as DeepModel>::DeepModelTy>

Source§

impl<T: DeepModel, A: Allocator> DeepModel for VecDeque<T, A>

Available on crate feature nightly only.
Source§

fn deep_model(self) -> Self::DeepModelTy

(opaque)

ensures

self.view().len() == result.len()

ensures

forall<i> 0 <= i && i < self.view().len()
              ==> result[i] == self[i].deep_model()
Source§

type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>

Source§

impl<T: DeepModel, A: Allocator> DeepModel for Vec<T, A>

Available on crate feature nightly only.
Source§

fn deep_model(self) -> Self::DeepModelTy

(opaque)

ensures

self.view().len() == result.len()

ensures

forall<i> 0 <= i && i < self.view().len()
              ==> result[i] == self[i].deep_model()
Source§

type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>

Source§

impl<T: DeepModel, E: DeepModel> DeepModel for Result<T, E>

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

match self {
    Ok(t) => Ok(t.deep_model()),
    Err(e) => Err(e.deep_model()),
}
Source§

type DeepModelTy = Result<<T as DeepModel>::DeepModelTy, <E as DeepModel>::DeepModelTy>

Source§

impl<T: DeepModel, const N: usize> DeepModel for [T; N]

Source§

fn deep_model(self) -> Self::DeepModelTy

(opaque)

ensures

self.view().len() == result.len()

ensures

forall<i> 0 <= i && i < result.len() ==> result[i] == self[i].deep_model()
Source§

type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>

Source§

impl<T: ?Sized> DeepModel for *const T

Source§

fn deep_model(self) -> Self::DeepModelTy

(opaque)

ensures

result.addr == self.addr_logic()

Source§

type DeepModelTy = PtrDeepModel

Source§

impl<T: ?Sized> DeepModel for *mut T

Source§

fn deep_model(self) -> Self::DeepModelTy

(opaque)

ensures

result.addr == self.addr_logic()

Source§

type DeepModelTy = PtrDeepModel

Source§

impl<U: DeepModel, T: DeepModel> DeepModel for (U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Source§

impl<V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (V, U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Source§

impl<W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (W, V, U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Source§

impl<X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (X, W, V, U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Source§

impl<Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (Y, X, W, V, U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Source§

impl<Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (Z, Y, X, W, V, U, T)

Source§

fn deep_model(self) -> Self::DeepModelTy

(open, inline)

pearlite! { ($(self.$idx.deep_model(),)+) }

Source§

type DeepModelTy = (<Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)

Implementors§