소스 검색

De-generalize `twos_complement' helper function

Eduardo Pinho 7 년 전
부모
커밋
15f9334955
1개의 변경된 파일6개의 추가작업 그리고 8개의 파일을 삭제
  1. 6 8
      bigint/src/bigint.rs

+ 6 - 8
bigint/src/bigint.rs

@@ -1,5 +1,5 @@
 use std::default::Default;
-use std::ops::{Add, Div, Mul, Neg, Rem, Shl, Shr, Sub, Not, DerefMut};
+use std::ops::{Add, Div, Mul, Neg, Rem, Shl, Shr, Sub, Not};
 use std::str::{self, FromStr};
 use std::fmt;
 use std::cmp::Ordering::{self, Less, Greater, Equal};
@@ -16,7 +16,7 @@ use serde;
 use rand::Rng;
 
 use integer::Integer;
-use traits::{ToPrimitive, FromPrimitive, Num, WrappingAdd, CheckedAdd, CheckedSub,
+use traits::{ToPrimitive, FromPrimitive, Num, CheckedAdd, CheckedSub,
              CheckedMul, CheckedDiv, Signed, Zero, One};
 
 use self::Sign::{Minus, NoSign, Plus};
@@ -1214,16 +1214,14 @@ fn twos_complement_be(digits: &mut [u8]) {
 /// Perform in-place two's complement of the given digit iterator
 /// starting from the least significant byte.
 #[inline]
-fn twos_complement<T, R, I>(digits: I)
-    where I: IntoIterator<Item = R>,
-          R: DerefMut<Target = T>,
-          T: Clone + Not<Output = T> + WrappingAdd + Zero + One
+fn twos_complement<'a, I>(digits: I)
+    where I: IntoIterator<Item = &'a mut u8>
 {
     let mut carry = true;
     for mut d in digits {
-        *d = d.clone().not();
+        *d = d.not();
         if carry {
-            *d = d.wrapping_add(&T::one());
+            *d = d.wrapping_add(1);
             carry = d.is_zero();
         }
     }