summaryrefslogtreecommitdiff
path: root/graph/src/lib.rs
diff options
context:
space:
mode:
authorJSDurand <mmemmew@gmail.com>2023-01-20 13:48:26 +0800
committerJSDurand <mmemmew@gmail.com>2023-01-20 13:48:26 +0800
commit18d7955b7d84c00467ede38baae53f4ce1fb6908 (patch)
tree97d0746b82816a21d980636e50f8cdbeb804b518 /graph/src/lib.rs
parent8f8d3d1a3c276be4be2e5d2e767ada564c47279a (diff)
chain: a prototype is added.
I have an ostensibly working prototype now. Further tests are needed to make sure that the algorithm meets the time complexity requirement, though.
Diffstat (limited to 'graph/src/lib.rs')
-rw-r--r--graph/src/lib.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/graph/src/lib.rs b/graph/src/lib.rs
index 6af7889..2a0c50d 100644
--- a/graph/src/lib.rs
+++ b/graph/src/lib.rs
@@ -251,10 +251,14 @@ pub trait ParentsGraph: Graph {
/// Return an iterator of parents for a node.
fn parents_of(&self, node_id: usize) -> Result<<Self as ParentsGraph>::Iter<'_>, Error>;
-}
-// TODO: Design a trait of graphs which can "replace" a certain child
-// by another child. To re-direct children, so to speak.
+ /// We need to be able to retrieve the `n`-the child, for the edge
+ /// index to be of any use.
+ fn nth_child(&self, node_id: usize, n: usize) -> Result<usize, Error>;
+
+ /// Convert an edge to a `Parent` construct.
+ fn edge_to_parent(&self, source: usize, target: usize) -> Result<Option<Parent>, Error>;
+}
/// An /exended/ graph in the sense that it offers the ability to
/// "redirect" children of a node to another node.