@@ -454,17 +454,6 @@ impl<'a, T: Clone + Num> From<&'a T> for Complex<T> {
454
454
}
455
455
456
456
macro_rules! forward_ref_ref_binop {
457
- ( impl $imp: ident, mul_add) => {
458
- impl <' a, ' b, T : Clone + Num > $imp<& ' b Complex <T >> for & ' a Complex <T > {
459
- type Output = Complex <T >;
460
-
461
- #[ inline]
462
- fn mul_add( self , other: & Complex <T >, add: & Complex <T >) -> Complex <T > {
463
- self . clone( ) . mul_add( other, add. clone( ) )
464
- }
465
- }
466
- } ;
467
-
468
457
( impl $imp: ident, $method: ident) => {
469
458
impl <' a, ' b, T : Clone + Num > $imp<& ' b Complex <T >> for & ' a Complex <T > {
470
459
type Output = Complex <T >;
@@ -478,17 +467,6 @@ macro_rules! forward_ref_ref_binop {
478
467
}
479
468
480
469
macro_rules! forward_ref_val_binop {
481
- ( impl $imp: ident, mul_add) => {
482
- impl <' a, T : Clone + Num > $imp<Complex <T >> for & ' a Complex <T > {
483
- type Output = Complex <T >;
484
-
485
- #[ inline]
486
- fn mul_add( self , other: Complex <T >, add: & Complex <T >) -> Complex <T > {
487
- self . clone( ) . mul_add( & other, add. clone( ) )
488
- }
489
- }
490
- } ;
491
-
492
470
( impl $imp: ident, $method: ident) => {
493
471
impl <' a, T : Clone + Num > $imp<Complex <T >> for & ' a Complex <T > {
494
472
type Output = Complex <T >;
@@ -502,17 +480,6 @@ macro_rules! forward_ref_val_binop {
502
480
}
503
481
504
482
macro_rules! forward_val_ref_binop {
505
- ( impl $imp: ident, mul_add) => {
506
- impl <' a, T : Clone + Num > $imp<& ' a Complex <T >> for Complex <T > {
507
- type Output = Complex <T >;
508
-
509
- #[ inline]
510
- fn mul_add( self , other: & Complex <T >, add: Complex <T >) -> Complex <T > {
511
- self . mul_add( other, add)
512
- }
513
- }
514
- } ;
515
-
516
483
( impl $imp: ident, $method: ident) => {
517
484
impl <' a, T : Clone + Num > $imp<& ' a Complex <T >> for Complex <T > {
518
485
type Output = Complex <T >;
@@ -573,20 +540,25 @@ impl<T: Clone + Num> Mul<Complex<T>> for Complex<T> {
573
540
}
574
541
575
542
576
- forward_all_binop ! ( impl MulAdd , mul_add) ;
577
-
578
543
// (a + i b) - (c + i d) == (a - c) + i (b - d)
579
544
impl < T : Clone + Num + MulAdd < Output = T > > MulAdd < Complex < T > > for Complex < T > {
580
545
type Output = Complex < T > ;
581
546
582
547
#[ inline]
583
- fn mul_add ( self , other : Complex < T > , x : Complex < T > ) -> Complex < T > {
584
- let re = self . re . clone ( ) . mul_add ( other. re . clone ( ) , x . re . clone ( ) ) - self . im . clone ( ) * other. im . clone ( ) ; // FIXME: use mulsub when available in rust
585
- let im = self . re . mul_add ( other. im , self . im . mul_add ( other. re , x . im ) ) ;
548
+ fn mul_add ( self , other : Complex < T > , add : Complex < T > ) -> Complex < T > {
549
+ let re = self . re . clone ( ) . mul_add ( other. re . clone ( ) , add . re . clone ( ) ) - self . im . clone ( ) * other. im . clone ( ) ; // FIXME: use mulsub when available in rust
550
+ let im = self . re . mul_add ( other. im , self . im . mul_add ( other. re , add . im ) ) ;
586
551
Complex :: new ( re, im)
587
552
}
588
553
}
554
+ impl < ' a , ' b , T : Clone + Num + MulAdd < Output = T > > MulAdd < & ' b Complex < T > > for & ' a Complex < T > {
555
+ type Output = Complex < T > ;
589
556
557
+ #[ inline]
558
+ fn mul_add ( self , other : & Complex < T > , add : & Complex < T > ) -> Complex < T > {
559
+ self . clone ( ) . mul_add ( other. clone ( ) , add. clone ( ) )
560
+ }
561
+ }
590
562
591
563
forward_all_binop ! ( impl Div , div) ;
592
564
@@ -650,9 +622,9 @@ mod opassign {
650
622
}
651
623
}
652
624
653
- impl < T : Clone + NumAssign + MulAddAssign > MulAddAssign for Complex < T > {
654
- fn mul_add_assign ( & mut self , a : Complex < T > , b : Complex < T > ) {
655
- * self = self . clone ( ) . mul_add ( & a , b ) ;
625
+ impl < T : Clone + NumAssign + MulAdd < Output = T > > MulAddAssign for Complex < T > {
626
+ fn mul_add_assign ( & mut self , other : Complex < T > , add : Complex < T > ) {
627
+ * self = self . clone ( ) . mul_add ( other , add ) ;
656
628
}
657
629
}
658
630
@@ -701,15 +673,6 @@ mod opassign {
701
673
}
702
674
703
675
macro_rules! forward_op_assign {
704
- ( impl $imp: ident, mul_add_assign) => {
705
- impl <' a, T : Clone + NumAssign > $imp<& ' a Complex <T >> for Complex <T > {
706
- #[ inline]
707
- fn mul_add_assign( & mut self , other: & Complex <T >, add: Complex <T >) {
708
- self . mul_add_assign( other, add)
709
- }
710
- }
711
- } ;
712
-
713
676
( impl $imp: ident, $method: ident) => {
714
677
impl <' a, T : Clone + NumAssign > $imp<& ' a Complex <T >> for Complex <T > {
715
678
#[ inline]
@@ -729,7 +692,6 @@ mod opassign {
729
692
forward_op_assign ! ( impl AddAssign , add_assign) ;
730
693
forward_op_assign ! ( impl SubAssign , sub_assign) ;
731
694
forward_op_assign ! ( impl MulAssign , mul_assign) ;
732
- forward_op_assign ! ( impl MulAddAssign , mul_add_assign) ;
733
695
forward_op_assign ! ( impl DivAssign , div_assign) ;
734
696
735
697
impl < ' a , T : Clone + NumAssign > RemAssign < & ' a Complex < T > > for Complex < T > {
0 commit comments