Skip to main content

Graph

Struct Graph 

Source
pub struct Graph { /* private fields */ }
Expand description

A built, type-checked DAG. Tile-independent; build once per style and evaluate many times.

Implementations§

Source§

impl Graph

Source

pub fn len(&self) -> usize

Number of nodes.

Source

pub fn is_empty(&self) -> bool

Source

pub fn output(&self) -> NodeIx

Source

pub fn topo_order(&self) -> &[NodeIx]

Topological order; output node is last.

Source

pub fn asset_inputs(&self) -> BTreeSet<String>

The union of every node’s Node::asset_inputs, deduplicated and ordered. A host consults this to learn which named bindings the document’s graph samples — including the @<dx>,<dy> neighbour names (see crate::neighbor) a cross-tile node requests, so it can fetch and bind exactly the neighbour tiles the graph needs rather than the whole 3×3 window unconditionally.

Source

pub fn node(&self, ix: NodeIx) -> &dyn Node

Source

pub fn node_id(&self, ix: NodeIx) -> &str

Source

pub fn index_of(&self, id: &str) -> Option<NodeIx>

Look up a node’s index by id.

Source

pub fn upstream(&self, ix: NodeIx) -> impl Iterator<Item = NodeIx> + '_

Upstream nodes feeding ix, deduplicated.

Source

pub fn downstream(&self, ix: NodeIx) -> &[NodeIx]

Downstream nodes consuming ix’s output (may contain duplicates if the same node connects multiple of its input ports to ix).

Source

pub fn downstream_unique(&self, ix: NodeIx) -> &[NodeIx]

Distinct downstream nodes consuming ix’s output, each listed once.

Source

pub fn indegree(&self, ix: NodeIx) -> usize

Number of distinct upstream nodes feeding ix (0 for sources).

Source

pub fn incoming(&self, ix: NodeIx, port_ix: usize) -> Option<NodeIx>

The source feeding node.inputs()[port_ix], if connected.

Source

pub fn output_kind(&self, ix: NodeIx) -> PortKind

Resolved output PortKind for ix. Decided at build time; polymorphic nodes’ kind is fixed once the graph is built.

Source

pub fn required_pad(&self) -> Result<u32, BuildError>

The canvas margin this graph needs, in pixels.

Every node that reads beyond the pixel it writes declares how far (Node::required_pad), and the fields those distances depend on must carry a static bound — precisely so this is answerable before anything renders. A host can therefore size its canvas from the graph instead of asking the style’s author to work it out:

let pad = doc.pad.max(graph.required_pad()?);

Treating the document’s pad as a floor rather than the answer keeps a deliberately generous margin intact while removing the failure mode where too small a one silently clamps edges.

It is a worst case: a $param contributes its declared max, so a blur whose sigma can reach 16 costs 48 px of margin on every render, not only the ones that use it. Pin pad explicitly to trade that back.

Source

pub fn influence_pads(&self, assets: &dyn AssetLoader) -> Vec<u32>

Per node, how far outside the canvas that node’s geometry can still reach the rendered tile — see Node::influence_pad.

A source consults its own entry to decide which features are worth carrying. Unlike Graph::compute_pad this never fails: a distance too large to be useful saturates at u32::MAX, which reads as “keep everything” and so errs towards drawing.

Source

pub fn compute_pad(&self, doc_pad: u32) -> Result<Vec<u32>, BuildError>

Compute the canvas padding each node must supply, given the margin requested at the output.

Pass 0 to learn what the chain itself adds — see Graph::required_pad. Passing the document’s pad answers a different question: what sources must supply for the padded canvas to be clean out to its own corners, which the final crop discards.

Trait Implementations§

Source§

impl Debug for Graph

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Graph

§

impl !UnwindSafe for Graph

§

impl Freeze for Graph

§

impl Send for Graph

§

impl Sync for Graph

§

impl Unpin for Graph

§

impl UnsafeUnpin for Graph

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more