pub struct CompTraversal { /* private fields */ }
Expand description

Define traversal order of components: pre-order, post-order, or none.

No order

Iterates over the components in any order

Post-order

If a component B creates a cell of type A then component A is guaranteed to be visited before B. This is done by finding a topological order over a graph where A will have a directed edge to B.

Instead of constructing a new vector of components in a topological order, the implementation builds an order vector which contains indices into the original component vector. This way, we can return the components in the input order once we’re done with the post order traversal.

Pre-order

Reverse of post-order

Example

let comps: Vec<ir::Component>;
// Construct a post order.
let post = PostOrder::new(comps, Order::Post);
// Apply a mutable update to components.
let upd: FnMut(&mut ir::Component) -> CalyxResult<()>;
post.apply_update(upd);
// Recover the components in original order.
let new_comps = post.take();

Implementations

Returns a new instance the PostOrder iterator given a Vector of components.

Panics

Panics if there is no post-order traversal of the vectors possible.

Traverses components in post-order and applies upd.

Returns the underlying component vector in original order.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.