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§
type DeepModelTy
Required Methods§
Sourcefn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
⚠
Implementations on Foreign Types§
Source§impl DeepModel for Ordering
impl DeepModel for Ordering
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
selftype DeepModelTy = Ordering
Source§impl DeepModel for bool
impl DeepModel for bool
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
selftype DeepModelTy = bool
Source§impl DeepModel for char
impl DeepModel for char
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for i8
impl DeepModel for i8
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for i16
impl DeepModel for i16
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for i32
impl DeepModel for i32
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for i64
impl DeepModel for i64
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for i128
impl DeepModel for i128
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for isize
impl DeepModel for isize
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for u8
impl DeepModel for u8
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for u16
impl DeepModel for u16
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for u32
impl DeepModel for u32
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for u64
impl DeepModel for u64
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for u128
impl DeepModel for u128
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for ()
impl DeepModel for ()
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { () }type DeepModelTy = ()
Source§impl DeepModel for usize
impl DeepModel for usize
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { self@ }type DeepModelTy = Int
Source§impl DeepModel for Duration
impl DeepModel for Duration
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
self.view()type DeepModelTy = Int
Source§impl DeepModel for Instant
impl DeepModel for Instant
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
self.view()type DeepModelTy = Int
Source§impl DeepModel for BigRational
Available on creusot only.
impl DeepModel for BigRational
creusot only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(opaque) ⚠
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)
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
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }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)
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
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }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)
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
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }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)
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
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }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)
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
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }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
impl<T: DeepModel + ?Sized> DeepModel for &T
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
(*self).deep_model()type DeepModelTy = <T as DeepModel>::DeepModelTy
Source§impl<T: DeepModel + ?Sized> DeepModel for &mut T
impl<T: DeepModel + ?Sized> DeepModel for &mut T
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
(*self).deep_model()type DeepModelTy = <T as DeepModel>::DeepModelTy
Source§impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Box<T, A>
Available on crate feature nightly only.
impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Box<T, A>
nightly only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
Box::new((*self).deep_model())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.
impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Rc<T, A>
nightly only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { *self.view().deep_model() }type DeepModelTy = <T as DeepModel>::DeepModelTy
Source§impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Arc<T, A>
Available on crate feature nightly only.
impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Arc<T, A>
nightly only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { *self.view().deep_model() }type DeepModelTy = <T as DeepModel>::DeepModelTy
Source§impl<T: DeepModel> DeepModel for Bound<T>
impl<T: DeepModel> DeepModel for Bound<T>
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
⚠
type DeepModelTy = Bound<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel> DeepModel for Option<T>
impl<T: DeepModel> DeepModel for Option<T>
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
match self { Some(t) => Some(t.deep_model()), None => None, }
type DeepModelTy = Option<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel> DeepModel for [T]
impl<T: DeepModel> DeepModel for [T]
Source§fn deep_model(self) -> Self::DeepModelTy
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()
type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel> DeepModel for (T,)
impl<T: DeepModel> DeepModel for (T,)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }type DeepModelTy = (<T as DeepModel>::DeepModelTy,)
Source§impl<T: DeepModel> DeepModel for Reverse<T>
impl<T: DeepModel> DeepModel for Reverse<T>
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { Reverse(self.0.deep_model()) }type DeepModelTy = Reverse<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel, A: Allocator> DeepModel for VecDeque<T, A>
Available on crate feature nightly only.
impl<T: DeepModel, A: Allocator> DeepModel for VecDeque<T, A>
nightly only.Source§fn deep_model(self) -> Self::DeepModelTy
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()
type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel, A: Allocator> DeepModel for Vec<T, A>
Available on crate feature nightly only.
impl<T: DeepModel, A: Allocator> DeepModel for Vec<T, A>
nightly only.Source§fn deep_model(self) -> Self::DeepModelTy
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()
type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel, E: DeepModel> DeepModel for Result<T, E>
impl<T: DeepModel, E: DeepModel> DeepModel for Result<T, E>
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
match self { Ok(t) => Ok(t.deep_model()), Err(e) => Err(e.deep_model()), }
type DeepModelTy = Result<<T as DeepModel>::DeepModelTy, <E as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel, const N: usize> DeepModel for [T; N]
impl<T: DeepModel, const N: usize> DeepModel for [T; N]
Source§fn deep_model(self) -> Self::DeepModelTy
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()
type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>
Source§impl<T: ?Sized> DeepModel for *const T
impl<T: ?Sized> DeepModel for *const T
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(opaque) ⚠
ensures
result.addr == self.addr_logic()type DeepModelTy = PtrDeepModel
Source§impl<T: ?Sized> DeepModel for *mut T
impl<T: ?Sized> DeepModel for *mut T
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(opaque) ⚠
ensures
result.addr == self.addr_logic()type DeepModelTy = PtrDeepModel
Source§impl<U: DeepModel, T: DeepModel> DeepModel for (U, T)
impl<U: DeepModel, T: DeepModel> DeepModel for (U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }type DeepModelTy = (<U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (V, U, T)
impl<V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }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)
impl<W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (W, V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }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)
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
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }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)
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
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }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)
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
fn deep_model(self) -> Self::DeepModelTy
(open, inline)
pearlite! { ($(self.$idx.deep_model(),)+) }