summaryrefslogtreecommitdiff
path: root/src/model/layout.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-09-21 17:50:58 +0200
committerLaurenz <laurmaedje@gmail.com>2022-09-21 20:25:57 +0200
commitddd3b6a82b8c0353c942bfba8b89ca5476eedc58 (patch)
treea64c350f0f1f82152ff18cfb02fbfdbf39292672 /src/model/layout.rs
parent3760748fddd3b793c79c370398a9d4a3fc5afc04 (diff)
Tracked memoization
Diffstat (limited to 'src/model/layout.rs')
-rw-r--r--src/model/layout.rs16
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>> {