diff options
| author | Huon Wilson <dbau.pp+github@gmail.com> | 2013-06-08 12:39:52 +1000 |
|---|---|---|
| committer | Huon Wilson <dbau.pp+github@gmail.com> | 2013-06-09 02:22:23 +1000 |
| commit | ce4f63dcee8997f8d2881e6e3cf9e04db085bd64 (patch) | |
| tree | 7a3bbc7439b0ea18118a8bd94a74d5709c8781ea /src/libextra | |
| parent | e2ec8e71cec0373616953f8188cf7c4953269af0 (diff) | |
| download | rust-ce4f63dcee8997f8d2881e6e3cf9e04db085bd64.tar.gz rust-ce4f63dcee8997f8d2881e6e3cf9e04db085bd64.zip | |
std: add reverse vec iterators, replace vec::each*_reverse.
Diffstat (limited to 'src/libextra')
| -rw-r--r-- | src/libextra/num/bigint.rs | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/src/libextra/num/bigint.rs b/src/libextra/num/bigint.rs index 77eef1d67ef..1411079d52f 100644 --- a/src/libextra/num/bigint.rs +++ b/src/libextra/num/bigint.rs @@ -19,7 +19,7 @@ A BigInt is a combination of BigUint and Sign. #[allow(missing_doc)]; use core::prelude::*; - +use core::iterator::IteratorUtil; use core::cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater}; use core::int; use core::num::{IntConvertible, Zero, One, ToStrRadix, FromStrRadix, Orderable}; @@ -129,12 +129,9 @@ impl TotalOrd for BigUint { if s_len < o_len { return Less; } if s_len > o_len { return Greater; } - for self.data.eachi_reverse |i, elm| { - match (*elm, other.data[i]) { - (l, r) if l < r => return Less, - (l, r) if l > r => return Greater, - _ => loop - }; + for self.data.rev_iter().zip(other.data.rev_iter()).advance |(&self_i, &other_i)| { + cond!((self_i < other_i) { return Less; } + (self_i > other_i) { return Greater; }) } return Equal; } @@ -421,7 +418,7 @@ impl Integer for BigUint { let bn = *b.data.last(); let mut d = ~[]; let mut carry = 0; - for an.each_reverse |elt| { + for an.rev_iter().advance |elt| { let ai = BigDigit::to_uint(carry, *elt); let di = ai / (bn as uint); assert!(di < BigDigit::base); @@ -648,7 +645,7 @@ impl BigUint { let mut borrow = 0; let mut shifted = ~[]; - for self.data.each_reverse |elem| { + for self.data.rev_iter().advance |elem| { shifted = ~[(*elem >> n_bits) | borrow] + shifted; borrow = *elem << (BigDigit::bits - n_bits); } |
