chiark / gitweb /
swap repack and try_into
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 11 Oct 2020 01:22:11 +0000 (02:22 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 11 Oct 2020 01:22:11 +0000 (02:22 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
zcoord/zcoord.rs

index 29bc8d72f3c2725e4392b661ece6f1b24807aebc..03261e0d9ec903f860817cd6569d9f6f70e0d6ea 100644 (file)
@@ -202,7 +202,26 @@ impl Mutable {
   pub fn decrement(&mut self) -> ZCoord { self.addsub(&AddSubDec)? }
 
   #[throws(Overflow)]
-  pub fn repack(&self) -> ZCoord { self.try_into()? }
+  pub fn repack(&self) -> ZCoord {
+    let taillen = (self.limbs.len() * TEXT_PER_LIMB - 1).try_into()?;
+    let mut bf = ZCoord::alloc(taillen);
+    let mut w = bf.tail_mut();
+    for mut l in self.limbs.iter().cloned() {
+      if l >= LIMB_MODULUS { throw!(Overflow) };
+      for p in w[0..DIGITS_PER_LIMB].rchunks_exact_mut(1) {
+        let v = (l & DIGIT_MASK).0 as u8;
+        p[0] = if v < 10 { b'0' + v } else { (b'a' - 10) + v };
+        l >>= BITS_PER_DIGIT;
+      }
+      if let Some(p) = w.get_mut(DIGITS_PER_LIMB) {
+        *p = b'_';
+      } else {
+        break;
+      }
+      w = &mut w[TEXT_PER_LIMB..];
+    }
+    bf
+  }
 }
 
 pub type RangeIterator = std::iter::Take<RangeIteratorCore>;
@@ -407,26 +426,7 @@ impl ZCoord {
 impl TryFrom<&Mutable> for ZCoord {
   type Error = Overflow;
   #[throws(Overflow)]
-  fn try_from(m: &Mutable) -> ZCoord {
-    let taillen = (m.limbs.len() * TEXT_PER_LIMB - 1).try_into()?;
-    let mut bf = ZCoord::alloc(taillen);
-    let mut w = bf.tail_mut();
-    for mut l in m.limbs.iter().cloned() {
-      if l >= LIMB_MODULUS { throw!(Overflow) };
-      for p in w[0..DIGITS_PER_LIMB].rchunks_exact_mut(1) {
-        let v = (l & DIGIT_MASK).0 as u8;
-        p[0] = if v < 10 { b'0' + v } else { (b'a' - 10) + v };
-        l >>= BITS_PER_DIGIT;
-      }
-      if let Some(p) = w.get_mut(DIGITS_PER_LIMB) {
-        *p = b'_';
-      } else {
-        break;
-      }
-      w = &mut w[TEXT_PER_LIMB..];
-    }
-    bf
-  }
+  fn try_from(m: &Mutable) -> ZCoord { m.repack()? }
 }
 
 //---------- innards, unsafe ----------