complex: require T:NumAssign for assign ops

This commit is contained in:
Josh Stone 2017-07-12 13:54:57 -07:00
parent 686411f44e
commit 055c6693b1
1 changed files with 11 additions and 11 deletions

View File

@ -521,54 +521,54 @@ impl<T: Clone + Num> Div<Complex<T>> for Complex<T> {
mod opassign { mod opassign {
use std::ops::{AddAssign, SubAssign, MulAssign, DivAssign}; use std::ops::{AddAssign, SubAssign, MulAssign, DivAssign};
use traits::Num; use traits::NumAssign;
use Complex; use Complex;
impl<T: Clone + Num> AddAssign for Complex<T> { impl<T: Clone + NumAssign> AddAssign for Complex<T> {
fn add_assign(&mut self, other: Complex<T>) { fn add_assign(&mut self, other: Complex<T>) {
*self = self.clone() + other; *self = self.clone() + other;
} }
} }
impl<T: Clone + Num> SubAssign for Complex<T> { impl<T: Clone + NumAssign> SubAssign for Complex<T> {
fn sub_assign(&mut self, other: Complex<T>) { fn sub_assign(&mut self, other: Complex<T>) {
*self = self.clone() - other; *self = self.clone() - other;
} }
} }
impl<T: Clone + Num> MulAssign for Complex<T> { impl<T: Clone + NumAssign> MulAssign for Complex<T> {
fn mul_assign(&mut self, other: Complex<T>) { fn mul_assign(&mut self, other: Complex<T>) {
*self = self.clone() * other; *self = self.clone() * other;
} }
} }
impl<T: Clone + Num> DivAssign for Complex<T> { impl<T: Clone + NumAssign> DivAssign for Complex<T> {
fn div_assign(&mut self, other: Complex<T>) { fn div_assign(&mut self, other: Complex<T>) {
*self = self.clone() / other; *self = self.clone() / other;
} }
} }
impl<T: Num + AddAssign> AddAssign<T> for Complex<T> { impl<T: Clone + NumAssign> AddAssign<T> for Complex<T> {
fn add_assign(&mut self, other: T) { fn add_assign(&mut self, other: T) {
self.re += other; self.re += other;
} }
} }
impl<T: Num + SubAssign> SubAssign<T> for Complex<T> { impl<T: Clone + NumAssign> SubAssign<T> for Complex<T> {
fn sub_assign(&mut self, other: T) { fn sub_assign(&mut self, other: T) {
self.re -= other; self.re -= other;
} }
} }
impl<T: Clone + Num + MulAssign> MulAssign<T> for Complex<T> { impl<T: Clone + NumAssign> MulAssign<T> for Complex<T> {
fn mul_assign(&mut self, other: T) { fn mul_assign(&mut self, other: T) {
self.re *= other.clone(); self.re *= other.clone();
self.im *= other; self.im *= other;
} }
} }
impl<T: Clone + Num + DivAssign> DivAssign<T> for Complex<T> { impl<T: Clone + NumAssign> DivAssign<T> for Complex<T> {
fn div_assign(&mut self, other: T) { fn div_assign(&mut self, other: T) {
self.re /= other.clone(); self.re /= other.clone();
self.im /= other; self.im /= other;
@ -577,13 +577,13 @@ mod opassign {
macro_rules! forward_op_assign { macro_rules! forward_op_assign {
(impl $imp:ident, $method:ident) => { (impl $imp:ident, $method:ident) => {
impl<'a, T: Clone + Num> $imp<&'a Complex<T>> for Complex<T> { impl<'a, T: Clone + NumAssign> $imp<&'a Complex<T>> for Complex<T> {
#[inline] #[inline]
fn $method(&mut self, other: &Complex<T>) { fn $method(&mut self, other: &Complex<T>) {
self.$method(other.clone()) self.$method(other.clone())
} }
} }
impl<'a, T: Clone + Num + $imp> $imp<&'a T> for Complex<T> { impl<'a, T: Clone + NumAssign> $imp<&'a T> for Complex<T> {
#[inline] #[inline]
fn $method(&mut self, other: &T) { fn $method(&mut self, other: &T) {
self.$method(other.clone()) self.$method(other.clone())