diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-09-21 17:50:58 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-09-21 20:25:57 +0200 |
| commit | ddd3b6a82b8c0353c942bfba8b89ca5476eedc58 (patch) | |
| tree | a64c350f0f1f82152ff18cfb02fbfdbf39292672 /src/model/layout.rs | |
| parent | 3760748fddd3b793c79c370398a9d4a3fc5afc04 (diff) | |
Tracked memoization
Diffstat (limited to 'src/model/layout.rs')
| -rw-r--r-- | src/model/layout.rs | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/model/layout.rs b/src/model/layout.rs index 68847471..8064afff 100644 --- a/src/model/layout.rs +++ b/src/model/layout.rs @@ -5,6 +5,8 @@ use std::fmt::{self, Debug, Formatter, Write}; use std::hash::Hash; use std::sync::Arc; +use comemo::{Prehashed, Tracked}; + use super::{Barrier, NodeId, Resolve, StyleChain, StyleEntry}; use crate::diag::SourceResult; use crate::eval::{RawAlign, RawLength}; @@ -14,7 +16,6 @@ use crate::geom::{ }; use crate::library::graphics::MoveNode; use crate::library::layout::{AlignNode, PadNode}; -use crate::util::Prehashed; use crate::World; /// A node that can be layouted into a sequence of regions. @@ -24,7 +25,7 @@ pub trait Layout: 'static { /// Layout this node into the given regions, producing frames. fn layout( &self, - world: &dyn World, + world: Tracked<dyn World>, regions: &Regions, styles: StyleChain, ) -> SourceResult<Vec<Frame>>; @@ -214,9 +215,10 @@ impl LayoutNode { } impl Layout for LayoutNode { + #[comemo::memoize] fn layout( &self, - world: &dyn World, + world: Tracked<dyn World>, regions: &Regions, styles: StyleChain, ) -> SourceResult<Vec<Frame>> { @@ -285,7 +287,7 @@ struct EmptyNode; impl Layout for EmptyNode { fn layout( &self, - _: &dyn World, + _: Tracked<dyn World>, regions: &Regions, _: StyleChain, ) -> SourceResult<Vec<Frame>> { @@ -307,7 +309,7 @@ struct SizedNode { impl Layout for SizedNode { fn layout( &self, - world: &dyn World, + world: Tracked<dyn World>, regions: &Regions, styles: StyleChain, ) -> SourceResult<Vec<Frame>> { @@ -354,7 +356,7 @@ struct FillNode { impl Layout for FillNode { fn layout( &self, - world: &dyn World, + world: Tracked<dyn World>, regions: &Regions, styles: StyleChain, ) -> SourceResult<Vec<Frame>> { @@ -379,7 +381,7 @@ struct StrokeNode { impl Layout for StrokeNode { fn layout( &self, - world: &dyn World, + world: Tracked<dyn World>, regions: &Regions, styles: StyleChain, ) -> SourceResult<Vec<Frame>> { |
