pub trait IntoIterGlobalNodes: Sized + Copy {
    type Iter: Iterator<Item = NodeIndex<u32>>;

    // Required methods
    fn iter_nodes(self) -> Self::Iter;
    fn controller_id(self) -> DefId;

    // Provided methods
    fn iter_global_nodes(self) -> GlobalNodeIter<Self> { ... }
    fn extended(self, other: impl IntoIterGlobalNodes) -> Option<NodeCluster> { ... }
    fn to_local_cluster(self) -> NodeCluster { ... }
}
Expand description

This lets us be agnostic whether a primitive (such as flows_to) is called with a GlobalNode or &NodeCluster.

Note that while GlobalNode implements this trait NodeCluster does not do so directly, but it’s reference &NodeCluster does.

Required Associated Types§

source

type Iter: Iterator<Item = NodeIndex<u32>>

The iterator returned by Self::iter_nodes

Required Methods§

source

fn iter_nodes(self) -> Self::Iter

iterate over the local nodes

source

fn controller_id(self) -> DefId

The controller id all of these nodes are located in.

Provided Methods§

source

fn iter_global_nodes(self) -> GlobalNodeIter<Self>

Iterate all nodes as globally identified one’s.

The invariant of this iterator is that all controller_id()s of the nodes in the iterator is the same as self.controller_id().

source

fn extended(self, other: impl IntoIterGlobalNodes) -> Option<NodeCluster>

A convenience method for gathering multiple node(cluster)s together.

Returns None if the controller id’s don’t match or both iterators are empty.

source

fn to_local_cluster(self) -> NodeCluster

Collect the iterator into a cluster

Implementors§