From 9201d9e7ee7cf2959e71227bb64f7371bf21559f Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Fri, 11 Apr 2025 19:34:59 +0100 Subject: [PATCH] Implement Display --- examples/a382121.rs | 4 ++-- src/finitenimber.rs | 25 ++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/examples/a382121.rs b/examples/a382121.rs index afc5893..a5e602f 100644 --- a/examples/a382121.rs +++ b/examples/a382121.rs @@ -1,6 +1,6 @@ use nimber::FiniteNimber; fn main() { - let n = FiniteNimber::from(3); - println!("{:?}", n); + let n = FiniteNimber::from(1234); + println!("{}", n); } diff --git a/src/finitenimber.rs b/src/finitenimber.rs index 7805ed5..58e403e 100644 --- a/src/finitenimber.rs +++ b/src/finitenimber.rs @@ -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) -- 2.30.2