diff --git a/core/src/lib.rs b/core/src/lib.rs index 18c672b..f3cf313 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -14,3 +14,8 @@ pub type Perhaps = Result, Box>; } }; } + +pub trait Has: Send + Sync { + fn get (&self) -> &T; + fn get_mut (&mut self) -> &mut T; +} diff --git a/output/src/space/measure.rs b/output/src/space/measure.rs index 2a1e415..9ea4765 100644 --- a/output/src/space/measure.rs +++ b/output/src/space/measure.rs @@ -3,13 +3,17 @@ use std::sync::{Arc, atomic::{AtomicUsize, Ordering::Relaxed}}; pub trait HasSize { fn size (&self) -> &Measure; + fn width (&self) -> usize { + self.size().w() + } + fn height (&self) -> usize { + self.size().w() + } } -#[macro_export] macro_rules! has_size { - (<$E:ty>|$self:ident:$Struct:ident$(<$($L:lifetime),*$($T:ident$(:$U:path)?),*>)?|$cb:expr) => { - impl $(<$($L),*$($T $(: $U)?),*>)? HasSize<$E> for $Struct $(<$($L),*$($T),*>)? { - fn size (&$self) -> &Measure<$E> { $cb } - } +impl>> HasSize for T { + fn size (&self) -> &Measure { + self.get() } }