chiark / gitweb /
Implement Display
authorSimon Tatham <anakin@pobox.com>
Fri, 11 Apr 2025 18:34:59 +0000 (19:34 +0100)
committerSimon Tatham <anakin@pobox.com>
Fri, 11 Apr 2025 18:34:59 +0000 (19:34 +0100)
examples/a382121.rs
src/finitenimber.rs

index afc589310ddd8052aadc0426bdd08071edb4d8a5..a5e602f538a8c8ec7022267bb3c6b0b3bb3b603c 100644 (file)
@@ -1,6 +1,6 @@
 use nimber::FiniteNimber;
 
 fn main() {
-    let n = FiniteNimber::from(3);
-    println!("{:?}", n);
+    let n = FiniteNimber::from(1234);
+    println!("{}", n);
 }
index 7805ed50c1dd2b18a61ba9959278a9addc652749..58e403e65a907a3304beb5bdc790c0950ddf39c9 100644 (file)
@@ -1,5 +1,5 @@
 use core::cmp::max;
-use core::fmt::{Debug, Formatter};
+use core::fmt::{Debug, Display, Formatter};
 use core::ops::{Add, Sub, Mul};
 
 type Word = u64; // element type of the vectors we use
@@ -44,6 +44,29 @@ impl Debug for FiniteNimberRef<'_> {
     }
 }
 
+impl Display for FiniteNimber {
+    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), core::fmt::Error> {
+        if self.to_ref().level() < WORDLEVELS && self.0[0] < 10 {
+            write!(f, "*{}", self.0[0])
+        } else {
+            write!(f, "*0x")?;
+            let mut started = false;
+            for v in self.0.iter().rev() {
+                if started {
+                    write!(f, "{:016x}", v)?;
+                } else if *v != 0 {
+                    write!(f, "{:x}", v)?;
+                    started = true;
+                }
+            }
+            if !started {
+                write!(f, "0")?;
+            }
+            Ok(())
+        }
+    }
+}
+
 impl<'a> FiniteNimberRef<'a> {
     fn zero() -> Self {
         OneWord(0)