From 15f933495559e0b9e284ca9ffbd6f26ff98b4a92 Mon Sep 17 00:00:00 2001 From: Eduardo Pinho Date: Tue, 20 Jun 2017 01:31:49 +0100 Subject: [PATCH] De-generalize `twos_complement' helper function --- bigint/src/bigint.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/bigint/src/bigint.rs b/bigint/src/bigint.rs index 7c5dce5..780aaeb 100644 --- a/bigint/src/bigint.rs +++ b/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(digits: I) - where I: IntoIterator, - R: DerefMut, - T: Clone + Not + WrappingAdd + Zero + One +fn twos_complement<'a, I>(digits: I) + where I: IntoIterator { 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(); } }