about summary refs log tree commit diff
path: root/src/libextra
diff options
context:
space:
mode:
authorHuon Wilson <dbau.pp+github@gmail.com>2013-06-08 12:39:52 +1000
committerHuon Wilson <dbau.pp+github@gmail.com>2013-06-09 02:22:23 +1000
commitce4f63dcee8997f8d2881e6e3cf9e04db085bd64 (patch)
tree7a3bbc7439b0ea18118a8bd94a74d5709c8781ea /src/libextra
parente2ec8e71cec0373616953f8188cf7c4953269af0 (diff)
downloadrust-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.rs15
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);
         }