pub trait Mul<Rhs = Self> {
type Output;
// Required method
fn mul(self, rhs: Rhs) -> Self::Output;
}Expand description
The multiplication operator *.
Note that Rhs is Self by default, but this is not mandatory.
§Examples
§Multipliable rational numbers
use std::ops::Mul;
// By the fundamental theorem of arithmetic, rational numbers in lowest
// terms are unique. So, by keeping `Rational`s in reduced form, we can
// derive `Eq` and `PartialEq`.
#[derive(Debug, Eq, PartialEq)]
struct Rational {
numerator: usize,
denominator: usize,
}
impl Rational {
fn new(numerator: usize, denominator: usize) -> Self {
if denominator == 0 {
panic!("Zero is an invalid denominator!");
}
// Reduce to lowest terms by dividing by the greatest common
// divisor.
let gcd = gcd(numerator, denominator);
Self {
numerator: numerator / gcd,
denominator: denominator / gcd,
}
}
}
impl Mul for Rational {
// The multiplication of rational numbers is a closed operation.
type Output = Self;
fn mul(self, rhs: Self) -> Self {
let numerator = self.numerator * rhs.numerator;
let denominator = self.denominator * rhs.denominator;
Self::new(numerator, denominator)
}
}
// Euclid's two-thousand-year-old algorithm for finding the greatest common
// divisor.
fn gcd(x: usize, y: usize) -> usize {
let mut x = x;
let mut y = y;
while y != 0 {
let t = y;
y = x % y;
x = t;
}
x
}
assert_eq!(Rational::new(1, 2), Rational::new(2, 4));
assert_eq!(Rational::new(2, 3) * Rational::new(3, 4),
Rational::new(1, 2));§Multiplying vectors by scalars as in linear algebra
use std::ops::Mul;
struct Scalar { value: usize }
#[derive(Debug, PartialEq)]
struct Vector { value: Vec<usize> }
impl Mul<Scalar> for Vector {
type Output = Self;
fn mul(self, rhs: Scalar) -> Self::Output {
Self { value: self.value.iter().map(|v| v * rhs.value).collect() }
}
}
let vector = Vector { value: vec![2, 4, 6] };
let scalar = Scalar { value: 3 };
assert_eq!(vector * scalar, Vector { value: vec![6, 12, 18] });Required Associated Types§
Required Methods§
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementors§
Source§impl Mul for BoxedMontyForm
impl Mul for BoxedMontyForm
type Output = BoxedMontyForm
Source§impl Mul for FieldElement
impl Mul for FieldElement
type Output = FieldElement
1.74.0 (const: unstable) · Source§impl Mul for Saturating<i128>
impl Mul for Saturating<i128>
type Output = Saturating<i128>
1.74.0 (const: unstable) · Source§impl Mul for Saturating<isize>
impl Mul for Saturating<isize>
type Output = Saturating<isize>
1.74.0 (const: unstable) · Source§impl Mul for Saturating<u128>
impl Mul for Saturating<u128>
type Output = Saturating<u128>
1.74.0 (const: unstable) · Source§impl Mul for Saturating<usize>
impl Mul for Saturating<usize>
type Output = Saturating<usize>
Source§impl Mul<&BoxedMontyForm> for &BoxedMontyForm
impl Mul<&BoxedMontyForm> for &BoxedMontyForm
type Output = BoxedMontyForm
Source§impl Mul<&BoxedMontyForm> for BoxedMontyForm
impl Mul<&BoxedMontyForm> for BoxedMontyForm
type Output = BoxedMontyForm
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i8>> for &Saturating<i8>
impl Mul<&Saturating<i8>> for &Saturating<i8>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i8>> for Saturating<i8>
impl Mul<&Saturating<i8>> for Saturating<i8>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i16>> for &Saturating<i16>
impl Mul<&Saturating<i16>> for &Saturating<i16>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i16>> for Saturating<i16>
impl Mul<&Saturating<i16>> for Saturating<i16>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i32>> for &Saturating<i32>
impl Mul<&Saturating<i32>> for &Saturating<i32>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i32>> for Saturating<i32>
impl Mul<&Saturating<i32>> for Saturating<i32>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i64>> for &Saturating<i64>
impl Mul<&Saturating<i64>> for &Saturating<i64>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i64>> for Saturating<i64>
impl Mul<&Saturating<i64>> for Saturating<i64>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i128>> for &Saturating<i128>
impl Mul<&Saturating<i128>> for &Saturating<i128>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i128>> for Saturating<i128>
impl Mul<&Saturating<i128>> for Saturating<i128>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<isize>> for &Saturating<isize>
impl Mul<&Saturating<isize>> for &Saturating<isize>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<isize>> for Saturating<isize>
impl Mul<&Saturating<isize>> for Saturating<isize>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u8>> for &Saturating<u8>
impl Mul<&Saturating<u8>> for &Saturating<u8>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u8>> for Saturating<u8>
impl Mul<&Saturating<u8>> for Saturating<u8>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u16>> for &Saturating<u16>
impl Mul<&Saturating<u16>> for &Saturating<u16>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u16>> for Saturating<u16>
impl Mul<&Saturating<u16>> for Saturating<u16>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u32>> for &Saturating<u32>
impl Mul<&Saturating<u32>> for &Saturating<u32>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u32>> for Saturating<u32>
impl Mul<&Saturating<u32>> for Saturating<u32>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u64>> for &Saturating<u64>
impl Mul<&Saturating<u64>> for &Saturating<u64>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u64>> for Saturating<u64>
impl Mul<&Saturating<u64>> for Saturating<u64>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u128>> for &Saturating<u128>
impl Mul<&Saturating<u128>> for &Saturating<u128>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u128>> for Saturating<u128>
impl Mul<&Saturating<u128>> for Saturating<u128>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<usize>> for &Saturating<usize>
impl Mul<&Saturating<usize>> for &Saturating<usize>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<usize>> for Saturating<usize>
impl Mul<&Saturating<usize>> for Saturating<usize>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<i128>> for &core::num::wrapping::Wrapping<i128>
impl Mul<&Wrapping<i128>> for &core::num::wrapping::Wrapping<i128>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
impl Mul<&Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<isize>> for core::num::wrapping::Wrapping<isize>
impl Mul<&Wrapping<isize>> for core::num::wrapping::Wrapping<isize>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<u128>> for &core::num::wrapping::Wrapping<u128>
impl Mul<&Wrapping<u128>> for &core::num::wrapping::Wrapping<u128>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
impl Mul<&Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<usize>> for core::num::wrapping::Wrapping<usize>
impl Mul<&Wrapping<usize>> for core::num::wrapping::Wrapping<usize>
Source§impl Mul<BoxedMontyForm> for &BoxedMontyForm
impl Mul<BoxedMontyForm> for &BoxedMontyForm
type Output = BoxedMontyForm
1.74.0 (const: unstable) · Source§impl Mul<Saturating<i8>> for &Saturating<i8>
impl Mul<Saturating<i8>> for &Saturating<i8>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<i16>> for &Saturating<i16>
impl Mul<Saturating<i16>> for &Saturating<i16>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<i32>> for &Saturating<i32>
impl Mul<Saturating<i32>> for &Saturating<i32>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<i64>> for &Saturating<i64>
impl Mul<Saturating<i64>> for &Saturating<i64>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<i128>> for &Saturating<i128>
impl Mul<Saturating<i128>> for &Saturating<i128>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<isize>> for &Saturating<isize>
impl Mul<Saturating<isize>> for &Saturating<isize>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<u8>> for &Saturating<u8>
impl Mul<Saturating<u8>> for &Saturating<u8>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<u16>> for &Saturating<u16>
impl Mul<Saturating<u16>> for &Saturating<u16>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<u32>> for &Saturating<u32>
impl Mul<Saturating<u32>> for &Saturating<u32>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<u64>> for &Saturating<u64>
impl Mul<Saturating<u64>> for &Saturating<u64>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<u128>> for &Saturating<u128>
impl Mul<Saturating<u128>> for &Saturating<u128>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<usize>> for &Saturating<usize>
impl Mul<Saturating<usize>> for &Saturating<usize>
1.14.0 (const: unstable) · Source§impl Mul<Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
impl Mul<Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
1.14.0 (const: unstable) · Source§impl Mul<Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
impl Mul<Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
Source§impl<C, P> Mul<&NonIdentity<P>> for &NonZeroScalar<C>where
C: CurveArithmetic,
for<'a> &'a NonIdentity<P>: Mul<&'a NonZeroScalar<C>, Output = NonIdentity<P>>,
impl<C, P> Mul<&NonIdentity<P>> for &NonZeroScalar<C>where
C: CurveArithmetic,
for<'a> &'a NonIdentity<P>: Mul<&'a NonZeroScalar<C>, Output = NonIdentity<P>>,
type Output = NonIdentity<P>
Source§impl<C, P> Mul<&NonIdentity<P>> for NonZeroScalar<C>where
C: CurveArithmetic,
for<'a> &'a NonIdentity<P>: Mul<NonZeroScalar<C>, Output = NonIdentity<P>>,
impl<C, P> Mul<&NonIdentity<P>> for NonZeroScalar<C>where
C: CurveArithmetic,
for<'a> &'a NonIdentity<P>: Mul<NonZeroScalar<C>, Output = NonIdentity<P>>,
type Output = NonIdentity<P>
Source§impl<C, P> Mul<&NonZeroScalar<C>> for &NonIdentity<P>
impl<C, P> Mul<&NonZeroScalar<C>> for &NonIdentity<P>
type Output = NonIdentity<P>
Source§impl<C, P> Mul<&NonZeroScalar<C>> for NonIdentity<P>
impl<C, P> Mul<&NonZeroScalar<C>> for NonIdentity<P>
type Output = NonIdentity<P>
Source§impl<C, P> Mul<NonIdentity<P>> for &NonZeroScalar<C>where
C: CurveArithmetic,
for<'a> NonIdentity<P>: Mul<&'a NonZeroScalar<C>, Output = NonIdentity<P>>,
impl<C, P> Mul<NonIdentity<P>> for &NonZeroScalar<C>where
C: CurveArithmetic,
for<'a> NonIdentity<P>: Mul<&'a NonZeroScalar<C>, Output = NonIdentity<P>>,
type Output = NonIdentity<P>
Source§impl<C, P> Mul<NonIdentity<P>> for NonZeroScalar<C>
impl<C, P> Mul<NonIdentity<P>> for NonZeroScalar<C>
type Output = NonIdentity<P>
Source§impl<C, P> Mul<NonZeroScalar<C>> for &NonIdentity<P>
impl<C, P> Mul<NonZeroScalar<C>> for &NonIdentity<P>
type Output = NonIdentity<P>
Source§impl<C, P> Mul<NonZeroScalar<C>> for NonIdentity<P>
impl<C, P> Mul<NonZeroScalar<C>> for NonIdentity<P>
type Output = NonIdentity<P>
Source§impl<C> Mul for NonZeroScalar<C>where
C: PrimeCurve + CurveArithmetic,
impl<C> Mul for NonZeroScalar<C>where
C: PrimeCurve + CurveArithmetic,
type Output = NonZeroScalar<C>
Source§impl<C> Mul<&NonZeroScalar<C>> for NonZeroScalar<C>where
C: PrimeCurve + CurveArithmetic,
impl<C> Mul<&NonZeroScalar<C>> for NonZeroScalar<C>where
C: PrimeCurve + CurveArithmetic,
type Output = NonZeroScalar<C>
Source§impl<G, const WINDOW_SIZE: usize> Mul<&WnafScalar<<G as Group>::Scalar, WINDOW_SIZE>> for &WnafBase<G, WINDOW_SIZE>where
G: Group,
impl<G, const WINDOW_SIZE: usize> Mul<&WnafScalar<<G as Group>::Scalar, WINDOW_SIZE>> for &WnafBase<G, WINDOW_SIZE>where
G: Group,
Source§impl<MOD, const LIMBS: usize> Mul for ConstMontyForm<MOD, LIMBS>where
MOD: ConstMontyParams<LIMBS>,
impl<MOD, const LIMBS: usize> Mul for ConstMontyForm<MOD, LIMBS>where
MOD: ConstMontyParams<LIMBS>,
type Output = ConstMontyForm<MOD, LIMBS>
Source§impl<MOD, const LIMBS: usize> Mul<&ConstMontyForm<MOD, LIMBS>> for &ConstMontyForm<MOD, LIMBS>where
MOD: ConstMontyParams<LIMBS>,
impl<MOD, const LIMBS: usize> Mul<&ConstMontyForm<MOD, LIMBS>> for &ConstMontyForm<MOD, LIMBS>where
MOD: ConstMontyParams<LIMBS>,
type Output = ConstMontyForm<MOD, LIMBS>
Source§impl<MOD, const LIMBS: usize> Mul<&ConstMontyForm<MOD, LIMBS>> for ConstMontyForm<MOD, LIMBS>where
MOD: ConstMontyParams<LIMBS>,
impl<MOD, const LIMBS: usize> Mul<&ConstMontyForm<MOD, LIMBS>> for ConstMontyForm<MOD, LIMBS>where
MOD: ConstMontyParams<LIMBS>,
type Output = ConstMontyForm<MOD, LIMBS>
Source§impl<MOD, const LIMBS: usize> Mul<ConstMontyForm<MOD, LIMBS>> for &ConstMontyForm<MOD, LIMBS>where
MOD: ConstMontyParams<LIMBS>,
impl<MOD, const LIMBS: usize> Mul<ConstMontyForm<MOD, LIMBS>> for &ConstMontyForm<MOD, LIMBS>where
MOD: ConstMontyParams<LIMBS>,
type Output = ConstMontyForm<MOD, LIMBS>
Source§impl<T> Mul for NonZero<T>where
T: Mul<Output = T>,
Any non-zero integer multiplied by another non-zero integer is definitionally non-zero.
impl<T> Mul for NonZero<T>where
T: Mul<Output = T>,
Any non-zero integer multiplied by another non-zero integer is definitionally non-zero.
Source§impl<T> Mul for Odd<T>where
T: Mul<Output = T>,
Any odd integer multiplied by another odd integer is definitionally odd.
impl<T> Mul for Odd<T>where
T: Mul<Output = T>,
Any odd integer multiplied by another odd integer is definitionally odd.
Source§impl<T> Mul for crypto_bigint::wrapping::Wrapping<T>where
T: WrappingMul,
impl<T> Mul for crypto_bigint::wrapping::Wrapping<T>where
T: WrappingMul,
Source§impl<Ul, B, Ur> Mul<UInt<Ur, B>> for UInt<Ul, B0>
UInt<Ul, B0> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0>
impl<Ul, B, Ur> Mul<UInt<Ur, B>> for UInt<Ul, B0>
UInt<Ul, B0> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0>
Source§impl<Ul, B, Ur> Mul<UInt<Ur, B>> for UInt<Ul, B1>
UInt<Ul, B1> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0> + UInt<Ur, B>
impl<Ul, B, Ur> Mul<UInt<Ur, B>> for UInt<Ul, B1>
UInt<Ul, B1> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0> + UInt<Ur, B>