mtls
only.Expand description
The subtraction operator -
.
Note that Rhs
is Self
by default, but this is not mandatory. For
example, std::time::SystemTime
implements Sub<Duration>
, which permits
operations of the form SystemTime = SystemTime - Duration
.
Examples
Sub
tractable points
use std::ops::Sub;
#[derive(Debug, Copy, Clone, PartialEq)]
struct Point {
x: i32,
y: i32,
}
impl Sub for Point {
type Output = Self;
fn sub(self, other: Self) -> Self::Output {
Self {
x: self.x - other.x,
y: self.y - other.y,
}
}
}
assert_eq!(Point { x: 3, y: 3 } - Point { x: 2, y: 3 },
Point { x: 1, y: 0 });
Implementing Sub
with generics
Here is an example of the same Point
struct implementing the Sub
trait
using generics.
use std::ops::Sub;
#[derive(Debug, PartialEq)]
struct Point<T> {
x: T,
y: T,
}
// Notice that the implementation uses the associated type `Output`.
impl<T: Sub<Output = T>> Sub for Point<T> {
type Output = Self;
fn sub(self, other: Self) -> Self::Output {
Point {
x: self.x - other.x,
y: self.y - other.y,
}
}
}
assert_eq!(Point { x: 2, y: 3 } - Point { x: 1, y: 0 },
Point { x: 1, y: 3 });
Required Associated Types
Required Methods
Implementations on Foreign Types
1.8.0 · sourceimpl Sub<Duration> for SystemTime
impl Sub<Duration> for SystemTime
type Output = SystemTime
fn sub(self, dur: Duration) -> SystemTime
1.8.0 · sourceimpl Sub<Instant> for Instant
impl Sub<Instant> for Instant
sourcefn sub(self, other: Instant) -> Duration
fn sub(self, other: Instant) -> Duration
Returns the amount of time elapsed from another instant to this one, or zero duration if that instant is later than this one.
Panics
Previous rust versions panicked when other
was later than self
. Currently this
method saturates. Future versions may reintroduce the panic in some circumstances.
See Monotonicity.
type Output = Duration
sourceimpl<const N: usize> Sub<Simd<i16, N>> for Simd<i16, N> where
i16: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<i16, N>> for Simd<i16, N> where
i16: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'a> Sub<Saturating<u16>> for &'a Saturating<u16>
impl<'a> Sub<Saturating<u16>> for &'a Saturating<u16>
type Output = <Saturating<u16> as Sub<Saturating<u16>>>::Output
fn sub(
self,
other: Saturating<u16>
) -> <Saturating<u16> as Sub<Saturating<u16>>>::Output
sourceimpl Sub<Saturating<i128>> for Saturating<i128>
impl Sub<Saturating<i128>> for Saturating<i128>
type Output = Saturating<i128>
fn sub(self, other: Saturating<i128>) -> Saturating<i128>
sourceimpl<'_, '_> Sub<&'_ Saturating<i8>> for &'_ Saturating<i8>
impl<'_, '_> Sub<&'_ Saturating<i8>> for &'_ Saturating<i8>
type Output = <Saturating<i8> as Sub<Saturating<i8>>>::Output
fn sub(
self,
other: &Saturating<i8>
) -> <Saturating<i8> as Sub<Saturating<i8>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<u16>> for &'_ Saturating<u16>
impl<'_, '_> Sub<&'_ Saturating<u16>> for &'_ Saturating<u16>
type Output = <Saturating<u16> as Sub<Saturating<u16>>>::Output
fn sub(
self,
other: &Saturating<u16>
) -> <Saturating<u16> as Sub<Saturating<u16>>>::Output
sourceimpl Sub<Saturating<isize>> for Saturating<isize>
impl Sub<Saturating<isize>> for Saturating<isize>
type Output = Saturating<isize>
fn sub(self, other: Saturating<isize>) -> Saturating<isize>
sourceimpl<'_> Sub<&'_ Saturating<u64>> for Saturating<u64>
impl<'_> Sub<&'_ Saturating<u64>> for Saturating<u64>
type Output = <Saturating<u64> as Sub<Saturating<u64>>>::Output
fn sub(
self,
other: &Saturating<u64>
) -> <Saturating<u64> as Sub<Saturating<u64>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<i16>> for Saturating<i16>
impl<'_> Sub<&'_ Saturating<i16>> for Saturating<i16>
type Output = <Saturating<i16> as Sub<Saturating<i16>>>::Output
fn sub(
self,
other: &Saturating<i16>
) -> <Saturating<i16> as Sub<Saturating<i16>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<u8>> for Saturating<u8>
impl<'_> Sub<&'_ Saturating<u8>> for Saturating<u8>
type Output = <Saturating<u8> as Sub<Saturating<u8>>>::Output
fn sub(
self,
other: &Saturating<u8>
) -> <Saturating<u8> as Sub<Saturating<u8>>>::Output
sourceimpl<'a> Sub<Saturating<i32>> for &'a Saturating<i32>
impl<'a> Sub<Saturating<i32>> for &'a Saturating<i32>
type Output = <Saturating<i32> as Sub<Saturating<i32>>>::Output
fn sub(
self,
other: Saturating<i32>
) -> <Saturating<i32> as Sub<Saturating<i32>>>::Output
sourceimpl Sub<Saturating<u16>> for Saturating<u16>
impl Sub<Saturating<u16>> for Saturating<u16>
type Output = Saturating<u16>
fn sub(self, other: Saturating<u16>) -> Saturating<u16>
sourceimpl<'_, '_> Sub<&'_ Saturating<i16>> for &'_ Saturating<i16>
impl<'_, '_> Sub<&'_ Saturating<i16>> for &'_ Saturating<i16>
type Output = <Saturating<i16> as Sub<Saturating<i16>>>::Output
fn sub(
self,
other: &Saturating<i16>
) -> <Saturating<i16> as Sub<Saturating<i16>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<u8>> for &'_ Saturating<u8>
impl<'_, '_> Sub<&'_ Saturating<u8>> for &'_ Saturating<u8>
type Output = <Saturating<u8> as Sub<Saturating<u8>>>::Output
fn sub(
self,
other: &Saturating<u8>
) -> <Saturating<u8> as Sub<Saturating<u8>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<i32>> for &'_ Saturating<i32>
impl<'_, '_> Sub<&'_ Saturating<i32>> for &'_ Saturating<i32>
type Output = <Saturating<i32> as Sub<Saturating<i32>>>::Output
fn sub(
self,
other: &Saturating<i32>
) -> <Saturating<i32> as Sub<Saturating<i32>>>::Output
sourceimpl<const N: usize> Sub<Simd<u16, N>> for Simd<u16, N> where
u16: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<u16, N>> for Simd<u16, N> where
u16: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_> Sub<&'_ Saturating<i32>> for Saturating<i32>
impl<'_> Sub<&'_ Saturating<i32>> for Saturating<i32>
type Output = <Saturating<i32> as Sub<Saturating<i32>>>::Output
fn sub(
self,
other: &Saturating<i32>
) -> <Saturating<i32> as Sub<Saturating<i32>>>::Output
sourceimpl<'_, T, const LANES: usize> Sub<Simd<T, LANES>> for &'_ Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
impl<'_, T, const LANES: usize> Sub<Simd<T, LANES>> for &'_ Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
sourceimpl<'a> Sub<Saturating<u128>> for &'a Saturating<u128>
impl<'a> Sub<Saturating<u128>> for &'a Saturating<u128>
type Output = <Saturating<u128> as Sub<Saturating<u128>>>::Output
fn sub(
self,
other: Saturating<u128>
) -> <Saturating<u128> as Sub<Saturating<u128>>>::Output
sourceimpl Sub<Saturating<i32>> for Saturating<i32>
impl Sub<Saturating<i32>> for Saturating<i32>
type Output = Saturating<i32>
fn sub(self, other: Saturating<i32>) -> Saturating<i32>
sourceimpl<'_, '_> Sub<&'_ Saturating<usize>> for &'_ Saturating<usize>
impl<'_, '_> Sub<&'_ Saturating<usize>> for &'_ Saturating<usize>
type Output = <Saturating<usize> as Sub<Saturating<usize>>>::Output
fn sub(
self,
other: &Saturating<usize>
) -> <Saturating<usize> as Sub<Saturating<usize>>>::Output
sourceimpl Sub<Saturating<i64>> for Saturating<i64>
impl Sub<Saturating<i64>> for Saturating<i64>
type Output = Saturating<i64>
fn sub(self, other: Saturating<i64>) -> Saturating<i64>
sourceimpl<const N: usize> Sub<Simd<u8, N>> for Simd<u8, N> where
u8: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<u8, N>> for Simd<u8, N> where
u8: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_, '_> Sub<&'_ Saturating<u128>> for &'_ Saturating<u128>
impl<'_, '_> Sub<&'_ Saturating<u128>> for &'_ Saturating<u128>
type Output = <Saturating<u128> as Sub<Saturating<u128>>>::Output
fn sub(
self,
other: &Saturating<u128>
) -> <Saturating<u128> as Sub<Saturating<u128>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<i8>> for Saturating<i8>
impl<'_> Sub<&'_ Saturating<i8>> for Saturating<i8>
type Output = <Saturating<i8> as Sub<Saturating<i8>>>::Output
fn sub(
self,
other: &Saturating<i8>
) -> <Saturating<i8> as Sub<Saturating<i8>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<u32>> for &'_ Saturating<u32>
impl<'_, '_> Sub<&'_ Saturating<u32>> for &'_ Saturating<u32>
type Output = <Saturating<u32> as Sub<Saturating<u32>>>::Output
fn sub(
self,
other: &Saturating<u32>
) -> <Saturating<u32> as Sub<Saturating<u32>>>::Output
sourceimpl<const N: usize> Sub<Simd<u32, N>> for Simd<u32, N> where
u32: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<u32, N>> for Simd<u32, N> where
u32: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_, '_> Sub<&'_ Saturating<i128>> for &'_ Saturating<i128>
impl<'_, '_> Sub<&'_ Saturating<i128>> for &'_ Saturating<i128>
type Output = <Saturating<i128> as Sub<Saturating<i128>>>::Output
fn sub(
self,
other: &Saturating<i128>
) -> <Saturating<i128> as Sub<Saturating<i128>>>::Output
sourceimpl<const N: usize> Sub<Simd<i8, N>> for Simd<i8, N> where
i8: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<i8, N>> for Simd<i8, N> where
i8: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_> Sub<&'_ Saturating<u32>> for Saturating<u32>
impl<'_> Sub<&'_ Saturating<u32>> for Saturating<u32>
type Output = <Saturating<u32> as Sub<Saturating<u32>>>::Output
fn sub(
self,
other: &Saturating<u32>
) -> <Saturating<u32> as Sub<Saturating<u32>>>::Output
sourceimpl<const N: usize> Sub<Simd<u64, N>> for Simd<u64, N> where
u64: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<u64, N>> for Simd<u64, N> where
u64: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_> Sub<&'_ Saturating<u128>> for Saturating<u128>
impl<'_> Sub<&'_ Saturating<u128>> for Saturating<u128>
type Output = <Saturating<u128> as Sub<Saturating<u128>>>::Output
fn sub(
self,
other: &Saturating<u128>
) -> <Saturating<u128> as Sub<Saturating<u128>>>::Output
sourceimpl<'a> Sub<Saturating<u64>> for &'a Saturating<u64>
impl<'a> Sub<Saturating<u64>> for &'a Saturating<u64>
type Output = <Saturating<u64> as Sub<Saturating<u64>>>::Output
fn sub(
self,
other: Saturating<u64>
) -> <Saturating<u64> as Sub<Saturating<u64>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<i64>> for &'_ Saturating<i64>
impl<'_, '_> Sub<&'_ Saturating<i64>> for &'_ Saturating<i64>
type Output = <Saturating<i64> as Sub<Saturating<i64>>>::Output
fn sub(
self,
other: &Saturating<i64>
) -> <Saturating<i64> as Sub<Saturating<i64>>>::Output
sourceimpl<'_, T, const LANES: usize> Sub<&'_ Simd<T, LANES>> for Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
impl<'_, T, const LANES: usize> Sub<&'_ Simd<T, LANES>> for Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
sourceimpl<'lhs, 'rhs, T, const LANES: usize> Sub<&'rhs Simd<T, LANES>> for &'lhs Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
impl<'lhs, 'rhs, T, const LANES: usize> Sub<&'rhs Simd<T, LANES>> for &'lhs Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
sourceimpl Sub<Saturating<u32>> for Saturating<u32>
impl Sub<Saturating<u32>> for Saturating<u32>
type Output = Saturating<u32>
fn sub(self, other: Saturating<u32>) -> Saturating<u32>
sourceimpl<'a> Sub<Saturating<i64>> for &'a Saturating<i64>
impl<'a> Sub<Saturating<i64>> for &'a Saturating<i64>
type Output = <Saturating<i64> as Sub<Saturating<i64>>>::Output
fn sub(
self,
other: Saturating<i64>
) -> <Saturating<i64> as Sub<Saturating<i64>>>::Output
sourceimpl<const N: usize> Sub<Simd<isize, N>> for Simd<isize, N> where
isize: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<isize, N>> for Simd<isize, N> where
isize: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_> Sub<&'_ Saturating<usize>> for Saturating<usize>
impl<'_> Sub<&'_ Saturating<usize>> for Saturating<usize>
type Output = <Saturating<usize> as Sub<Saturating<usize>>>::Output
fn sub(
self,
other: &Saturating<usize>
) -> <Saturating<usize> as Sub<Saturating<usize>>>::Output
sourceimpl<'a> Sub<Saturating<usize>> for &'a Saturating<usize>
impl<'a> Sub<Saturating<usize>> for &'a Saturating<usize>
type Output = <Saturating<usize> as Sub<Saturating<usize>>>::Output
fn sub(
self,
other: Saturating<usize>
) -> <Saturating<usize> as Sub<Saturating<usize>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<isize>> for Saturating<isize>
impl<'_> Sub<&'_ Saturating<isize>> for Saturating<isize>
type Output = <Saturating<isize> as Sub<Saturating<isize>>>::Output
fn sub(
self,
other: &Saturating<isize>
) -> <Saturating<isize> as Sub<Saturating<isize>>>::Output
sourceimpl<'a> Sub<Saturating<i16>> for &'a Saturating<i16>
impl<'a> Sub<Saturating<i16>> for &'a Saturating<i16>
type Output = <Saturating<i16> as Sub<Saturating<i16>>>::Output
fn sub(
self,
other: Saturating<i16>
) -> <Saturating<i16> as Sub<Saturating<i16>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<i64>> for Saturating<i64>
impl<'_> Sub<&'_ Saturating<i64>> for Saturating<i64>
type Output = <Saturating<i64> as Sub<Saturating<i64>>>::Output
fn sub(
self,
other: &Saturating<i64>
) -> <Saturating<i64> as Sub<Saturating<i64>>>::Output
sourceimpl<'a> Sub<Saturating<isize>> for &'a Saturating<isize>
impl<'a> Sub<Saturating<isize>> for &'a Saturating<isize>
type Output = <Saturating<isize> as Sub<Saturating<isize>>>::Output
fn sub(
self,
other: Saturating<isize>
) -> <Saturating<isize> as Sub<Saturating<isize>>>::Output
sourceimpl<const N: usize> Sub<Simd<i32, N>> for Simd<i32, N> where
i32: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<i32, N>> for Simd<i32, N> where
i32: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<const N: usize> Sub<Simd<i64, N>> for Simd<i64, N> where
i64: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<i64, N>> for Simd<i64, N> where
i64: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl Sub<Saturating<i8>> for Saturating<i8>
impl Sub<Saturating<i8>> for Saturating<i8>
type Output = Saturating<i8>
fn sub(self, other: Saturating<i8>) -> Saturating<i8>
sourceimpl<'a> Sub<Saturating<u8>> for &'a Saturating<u8>
impl<'a> Sub<Saturating<u8>> for &'a Saturating<u8>
type Output = <Saturating<u8> as Sub<Saturating<u8>>>::Output
fn sub(
self,
other: Saturating<u8>
) -> <Saturating<u8> as Sub<Saturating<u8>>>::Output
sourceimpl Sub<Saturating<i16>> for Saturating<i16>
impl Sub<Saturating<i16>> for Saturating<i16>
type Output = Saturating<i16>
fn sub(self, other: Saturating<i16>) -> Saturating<i16>
sourceimpl<const N: usize> Sub<Simd<f64, N>> for Simd<f64, N> where
f64: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<f64, N>> for Simd<f64, N> where
f64: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_, '_> Sub<&'_ Saturating<isize>> for &'_ Saturating<isize>
impl<'_, '_> Sub<&'_ Saturating<isize>> for &'_ Saturating<isize>
type Output = <Saturating<isize> as Sub<Saturating<isize>>>::Output
fn sub(
self,
other: &Saturating<isize>
) -> <Saturating<isize> as Sub<Saturating<isize>>>::Output
sourceimpl Sub<Saturating<u128>> for Saturating<u128>
impl Sub<Saturating<u128>> for Saturating<u128>
type Output = Saturating<u128>
fn sub(self, other: Saturating<u128>) -> Saturating<u128>
sourceimpl Sub<Saturating<usize>> for Saturating<usize>
impl Sub<Saturating<usize>> for Saturating<usize>
type Output = Saturating<usize>
fn sub(self, other: Saturating<usize>) -> Saturating<usize>
sourceimpl<const N: usize> Sub<Simd<f32, N>> for Simd<f32, N> where
f32: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<f32, N>> for Simd<f32, N> where
f32: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_> Sub<&'_ Saturating<u16>> for Saturating<u16>
impl<'_> Sub<&'_ Saturating<u16>> for Saturating<u16>
type Output = <Saturating<u16> as Sub<Saturating<u16>>>::Output
fn sub(
self,
other: &Saturating<u16>
) -> <Saturating<u16> as Sub<Saturating<u16>>>::Output
sourceimpl<'a> Sub<Saturating<u32>> for &'a Saturating<u32>
impl<'a> Sub<Saturating<u32>> for &'a Saturating<u32>
type Output = <Saturating<u32> as Sub<Saturating<u32>>>::Output
fn sub(
self,
other: Saturating<u32>
) -> <Saturating<u32> as Sub<Saturating<u32>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<i128>> for Saturating<i128>
impl<'_> Sub<&'_ Saturating<i128>> for Saturating<i128>
type Output = <Saturating<i128> as Sub<Saturating<i128>>>::Output
fn sub(
self,
other: &Saturating<i128>
) -> <Saturating<i128> as Sub<Saturating<i128>>>::Output
sourceimpl Sub<Saturating<u64>> for Saturating<u64>
impl Sub<Saturating<u64>> for Saturating<u64>
type Output = Saturating<u64>
fn sub(self, other: Saturating<u64>) -> Saturating<u64>
sourceimpl<const N: usize> Sub<Simd<usize, N>> for Simd<usize, N> where
usize: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<usize, N>> for Simd<usize, N> where
usize: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'a> Sub<Saturating<i8>> for &'a Saturating<i8>
impl<'a> Sub<Saturating<i8>> for &'a Saturating<i8>
type Output = <Saturating<i8> as Sub<Saturating<i8>>>::Output
fn sub(
self,
other: Saturating<i8>
) -> <Saturating<i8> as Sub<Saturating<i8>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<u64>> for &'_ Saturating<u64>
impl<'_, '_> Sub<&'_ Saturating<u64>> for &'_ Saturating<u64>
type Output = <Saturating<u64> as Sub<Saturating<u64>>>::Output
fn sub(
self,
other: &Saturating<u64>
) -> <Saturating<u64> as Sub<Saturating<u64>>>::Output
sourceimpl<'a> Sub<Saturating<i128>> for &'a Saturating<i128>
impl<'a> Sub<Saturating<i128>> for &'a Saturating<i128>
type Output = <Saturating<i128> as Sub<Saturating<i128>>>::Output
fn sub(
self,
other: Saturating<i128>
) -> <Saturating<i128> as Sub<Saturating<i128>>>::Output
sourceimpl Sub<Saturating<u8>> for Saturating<u8>
impl Sub<Saturating<u8>> for Saturating<u8>
type Output = Saturating<u8>
fn sub(self, other: Saturating<u8>) -> Saturating<u8>
sourceimpl Sub<OffsetDateTime> for SystemTime
impl Sub<OffsetDateTime> for SystemTime
type Output = Duration
fn sub(self, rhs: OffsetDateTime) -> <SystemTime as Sub<OffsetDateTime>>::Output
sourceimpl<T> Sub<T> for OffsetDateTime where
PrimitiveDateTime: Sub<T>,
<PrimitiveDateTime as Sub<T>>::Output == PrimitiveDateTime,
impl<T> Sub<T> for OffsetDateTime where
PrimitiveDateTime: Sub<T>,
<PrimitiveDateTime as Sub<T>>::Output == PrimitiveDateTime,
type Output = OffsetDateTime
fn sub(self, rhs: T) -> <OffsetDateTime as Sub<T>>::Output
sourceimpl Sub<Duration> for PrimitiveDateTime
impl Sub<Duration> for PrimitiveDateTime
type Output = PrimitiveDateTime
fn sub(self, duration: Duration) -> <PrimitiveDateTime as Sub<Duration>>::Output
sourceimpl Sub<PrimitiveDateTime> for PrimitiveDateTime
impl Sub<PrimitiveDateTime> for PrimitiveDateTime
type Output = Duration
fn sub(
self,
rhs: PrimitiveDateTime
) -> <PrimitiveDateTime as Sub<PrimitiveDateTime>>::Output
sourceimpl Sub<OffsetDateTime> for OffsetDateTime
impl Sub<OffsetDateTime> for OffsetDateTime
type Output = Duration
fn sub(
self,
rhs: OffsetDateTime
) -> <OffsetDateTime as Sub<OffsetDateTime>>::Output
sourceimpl Sub<SystemTime> for OffsetDateTime
impl Sub<SystemTime> for OffsetDateTime
type Output = Duration
fn sub(self, rhs: SystemTime) -> <OffsetDateTime as Sub<SystemTime>>::Output
sourceimpl Sub<Duration> for PrimitiveDateTime
impl Sub<Duration> for PrimitiveDateTime
type Output = PrimitiveDateTime
fn sub(self, duration: Duration) -> <PrimitiveDateTime as Sub<Duration>>::Output
sourceimpl Sub<Time> for Time
impl Sub<Time> for Time
sourcefn sub(self, rhs: Time) -> <Time as Sub<Time>>::Output
fn sub(self, rhs: Time) -> <Time as Sub<Time>>::Output
Subtract two Time
s, returning the Duration
between. This assumes both Time
s are in
the same calendar day.
assert_eq!(time!(0:00) - time!(0:00), 0.seconds());
assert_eq!(time!(1:00) - time!(0:00), 1.hours());
assert_eq!(time!(0:00) - time!(1:00), (-1).hours());
assert_eq!(time!(0:00) - time!(23:00), (-23).hours());
type Output = Duration
sourceimpl Sub<Duration> for SystemTime
impl Sub<Duration> for SystemTime
type Output = SystemTime
fn sub(self, duration: Duration) -> <SystemTime as Sub<Duration>>::Output
sourceimpl<'_, '_, T, S1, S2> Sub<&'_ IndexSet<T, S2>> for &'_ IndexSet<T, S1> where
T: Eq + Hash + Clone,
S1: BuildHasher + Default,
S2: BuildHasher,
impl<'_, '_, T, S1, S2> Sub<&'_ IndexSet<T, S2>> for &'_ IndexSet<T, S1> where
T: Eq + Hash + Clone,
S1: BuildHasher + Default,
S2: BuildHasher,
impl<'_, '_, T, S> Sub<&'_ HashSet<T, S, Global>> for &'_ HashSet<T, S, Global> where
T: Eq + Hash + Clone,
S: BuildHasher + Default,
impl<'_, '_, T, S> Sub<&'_ HashSet<T, S, Global>> for &'_ HashSet<T, S, Global> where
T: Eq + Hash + Clone,
S: BuildHasher + Default,
fn sub(self, rhs: &HashSet<T, S, Global>) -> HashSet<T, S, Global>
fn sub(self, rhs: &HashSet<T, S, Global>) -> HashSet<T, S, Global>
Returns the difference of self
and rhs
as a new HashSet<T, S>
.
Examples
use hashbrown::HashSet;
let a: HashSet<_> = vec![1, 2, 3].into_iter().collect();
let b: HashSet<_> = vec![3, 4, 5].into_iter().collect();
let set = &a - &b;
let mut i = 0;
let expected = [1, 2];
for x in &set {
assert!(expected.contains(x));
i += 1;
}
assert_eq!(i, expected.len());
type Output = HashSet<T, S, Global>
sourceimpl<Ul, Bl, Ur> Sub<Ur> for UInt<Ul, Bl> where
Ul: Unsigned,
Bl: Bit,
Ur: Unsigned,
UInt<Ul, Bl>: PrivateSub<Ur>,
<UInt<Ul, Bl> as PrivateSub<Ur>>::Output: Trim,
impl<Ul, Bl, Ur> Sub<Ur> for UInt<Ul, Bl> where
Ul: Unsigned,
Bl: Bit,
Ur: Unsigned,
UInt<Ul, Bl>: PrivateSub<Ur>,
<UInt<Ul, Bl> as PrivateSub<Ur>>::Output: Trim,
Subtracting unsigned integers. We just do our PrivateSub
and then Trim
the output.
sourceimpl<Ul, Ur> Sub<PInt<Ur>> for NInt<Ul> where
Ul: Unsigned + NonZero + Add<Ur>,
Ur: Unsigned + NonZero,
<Ul as Add<Ur>>::Output: Unsigned,
<Ul as Add<Ur>>::Output: NonZero,
impl<Ul, Ur> Sub<PInt<Ur>> for NInt<Ul> where
Ul: Unsigned + NonZero + Add<Ur>,
Ur: Unsigned + NonZero,
<Ul as Add<Ur>>::Output: Unsigned,
<Ul as Add<Ur>>::Output: NonZero,
N(Ul) - P(Ur) = N(Ul + Ur)
sourceimpl<Ul, Ur> Sub<PInt<Ur>> for PInt<Ul> where
Ul: Unsigned + NonZero + Cmp<Ur> + PrivateIntegerAdd<<Ul as Cmp<Ur>>::Output, Ur>,
Ur: Unsigned + NonZero,
impl<Ul, Ur> Sub<PInt<Ur>> for PInt<Ul> where
Ul: Unsigned + NonZero + Cmp<Ur> + PrivateIntegerAdd<<Ul as Cmp<Ur>>::Output, Ur>,
Ur: Unsigned + NonZero,
P(Ul) - P(Ur)
: We resolve this with our PrivateAdd
sourceimpl<U> Sub<B1> for UInt<U, B0> where
U: Unsigned + Sub<B1>,
<U as Sub<B1>>::Output: Unsigned,
impl<U> Sub<B1> for UInt<U, B0> where
U: Unsigned + Sub<B1>,
<U as Sub<B1>>::Output: Unsigned,
UInt<U, B0> - B1 = UInt<U - B1, B1>
sourceimpl<Ul, Ur> Sub<NInt<Ur>> for PInt<Ul> where
Ul: Unsigned + NonZero + Add<Ur>,
Ur: Unsigned + NonZero,
<Ul as Add<Ur>>::Output: Unsigned,
<Ul as Add<Ur>>::Output: NonZero,
impl<Ul, Ur> Sub<NInt<Ur>> for PInt<Ul> where
Ul: Unsigned + NonZero + Add<Ur>,
Ur: Unsigned + NonZero,
<Ul as Add<Ur>>::Output: Unsigned,
<Ul as Add<Ur>>::Output: NonZero,
P(Ul) - N(Ur) = P(Ul + Ur)
sourceimpl<U, B> Sub<B1> for UInt<UInt<U, B>, B1> where
U: Unsigned,
B: Bit,
impl<U, B> Sub<B1> for UInt<UInt<U, B>, B1> where
U: Unsigned,
B: Bit,
UInt<U, B1> - B1 = UInt<U, B0>
sourceimpl<Ul, Ur> Sub<NInt<Ur>> for NInt<Ul> where
Ul: Unsigned + NonZero,
Ur: Unsigned + NonZero + Cmp<Ul> + PrivateIntegerAdd<<Ur as Cmp<Ul>>::Output, Ul>,
impl<Ul, Ur> Sub<NInt<Ur>> for NInt<Ul> where
Ul: Unsigned + NonZero,
Ur: Unsigned + NonZero + Cmp<Ul> + PrivateIntegerAdd<<Ur as Cmp<Ul>>::Output, Ul>,
N(Ul) - N(Ur)
: We resolve this with our PrivateAdd