New methods for adding child edges to graph.
This commit is contained in:
parent
f57667f410
commit
6ce69e5d12
@ -182,6 +182,42 @@ impl<'a, T, S, A> MutChildList<'a, T, S, A> where T: Hash + Eq + Clone + 'a, S:
|
|||||||
pub fn iter<'s>(&'s self) -> ChildListIter<'s, T, S, A> {
|
pub fn iter<'s>(&'s self) -> ChildListIter<'s, T, S, A> {
|
||||||
self.get_source_node().get_child_list().iter()
|
self.get_source_node().get_child_list().iter()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Adds a child edge to the vertex labeled by `child_label`. If no such
|
||||||
|
/// vertex exists, it is created and associated with the data returned by
|
||||||
|
/// `f`. Returns a mutable edge handle for the new edge, with a lifetime
|
||||||
|
/// limited to a borrow of `self`.
|
||||||
|
pub fn add_child<'s, F>(&'s mut self, child_label: T, f: F, edge_data: A)
|
||||||
|
-> MutEdge<'s, T, S, A>
|
||||||
|
where F: FnOnce() -> S {
|
||||||
|
let target_id = match self.graph.state_ids.get_or_insert(child_label) {
|
||||||
|
NamespaceInsertion::Present(id) => id,
|
||||||
|
NamespaceInsertion::New(id) => {
|
||||||
|
self.graph.add_raw_vertex(f());
|
||||||
|
id
|
||||||
|
},
|
||||||
|
};
|
||||||
|
let edge_id =
|
||||||
|
EdgeId(self.graph.add_edge_from_raw(self.id, target_id, edge_data).get_id());
|
||||||
|
MutEdge { graph: self.graph, id: edge_id, }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Adds a child edge to the vertex labeled by `child_label`. If no such
|
||||||
|
/// vertex exists, it is created and associated with the data returned by
|
||||||
|
/// `f`. Returns a mutable edge handle for the new edge.
|
||||||
|
pub fn to_add_child<F>(self, child_label: T, f: F, edge_data: A) -> MutEdge<'a, T, S, A>
|
||||||
|
where F: FnOnce() -> S {
|
||||||
|
let target_id = match self.graph.state_ids.get_or_insert(child_label) {
|
||||||
|
NamespaceInsertion::Present(id) => id,
|
||||||
|
NamespaceInsertion::New(id) => {
|
||||||
|
self.graph.add_raw_vertex(f());
|
||||||
|
id
|
||||||
|
},
|
||||||
|
};
|
||||||
|
let edge_id =
|
||||||
|
EdgeId(self.graph.add_edge_from_raw(self.id, target_id, edge_data).get_id());
|
||||||
|
MutEdge { graph: self.graph, id: edge_id, }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A traversible list of a vertex's incoming edges.
|
/// A traversible list of a vertex's incoming edges.
|
||||||
|
@ -124,6 +124,12 @@ impl<T, S, A> Graph<T, S, A> where T: Hash + Eq + Clone {
|
|||||||
make_mut_node(self, node_id)
|
make_mut_node(self, node_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn add_edge_from_raw<'s>(&'s mut self, source: VertexId, target: VertexId, data: A)
|
||||||
|
-> MutEdge<'s, T, S, A> {
|
||||||
|
let arc_id = self.add_raw_edge(data, source, target);
|
||||||
|
make_mut_edge(self, arc_id)
|
||||||
|
}
|
||||||
|
|
||||||
/// Adds an edge from the vertex with state data `source` to the vertex with
|
/// Adds an edge from the vertex with state data `source` to the vertex with
|
||||||
/// state data `dest`. If vertices are not found for `source` or `dest`,
|
/// state data `dest`. If vertices are not found for `source` or `dest`,
|
||||||
/// they are added, with the data provided by `source_data` and `dest_data`
|
/// they are added, with the data provided by `source_data` and `dest_data`
|
||||||
@ -150,8 +156,7 @@ impl<T, S, A> Graph<T, S, A> where T: Hash + Eq + Clone {
|
|||||||
id
|
id
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
let arc_id = self.add_raw_edge(edge_data, source_id, dest_id);
|
self.add_edge_from_raw(source_id, dest_id, edge_data)
|
||||||
make_mut_edge(self, arc_id)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the number of vertices in the graph.
|
/// Returns the number of vertices in the graph.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user