Crate rs_graph_derive [−] [src]
This create provides automatic graph derivations.
In order to automatically implement graph traits for
a struct that contains the actual graph data structure in a field,
add #[derive(Graph)] to the struct. The field containing the graph
must either be named graph
or be attributed with #[graph]
.
All graph traits (Graph
, Digraph
, Network
, IndexGraph
and
IndexNetwork
) that are implemented for the nested graph, are
implemented for the annotated struct, too.
Example
extern crate rs_graph; #[macro_use] extern crate rs_graph_derive; use rs_graph::{Graph, IndexGraph}; use rs_graph::linkedlistgraph::*; use rs_graph::classes; #[derive(Graph)] struct MyGraph { #[graph] graph: LinkedListGraph, // #[graph] not need for fields named `graph`. balances: Vec<f64>, bounds: Vec<f64>, } impl From<LinkedListGraph> for MyGraph { fn from(g: LinkedListGraph) -> MyGraph { let n = g.num_nodes(); let m = g.num_edges(); MyGraph { graph: g, balances: vec![0.0; n], bounds: vec![0.0; m], } } } impl MyGraph { fn balance_mut(&mut self, u: Node) -> &mut f64 { &mut self.balances[self.graph.node_id(u)] } fn bound_mut(&mut self, e: Edge) -> &mut f64 { &mut self.bounds[self.graph.edge_id(e)] } } let mut g: MyGraph = classes::path::<LinkedListGraph>(5).into(); let (s, t) = (g.id2node(0), g.id2node(4)); *g.balance_mut(s) = 1.0; *g.balance_mut(t) = -1.0; for e in g.edges() { *g.bound_mut(e) = g.edge_id(e) as f64; }
Functions
graph |