summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-04-04 14:31:46 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-04-04 14:31:46 +0200
commit359be3143008faed4bc2d467b5c2a4e62bc6bfdc (patch)
treea6ec479df123cdfbd50d458d16895fae7ea6475e
parent14756511ed322cf8544acd612c741920224449c9 (diff)
Merging should be possible without consuming the merged DAG
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--src/async_dag.rs12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/async_dag.rs b/src/async_dag.rs
index 78886e3..20a3239 100644
--- a/src/async_dag.rs
+++ b/src/async_dag.rs
@@ -126,10 +126,10 @@ impl<Id, N, Backend> AsyncDag<Id, N, Backend>
///
/// Use the `merger` function to merge the two head IDs and generate a new Node instance for
/// the new HEAD of `self`.
- pub async fn merge<M>(&mut self, other: AsyncDag<Id, N, Backend>, merger: M) -> Result<Id>
+ pub async fn merge<M>(&mut self, other: &AsyncDag<Id, N, Backend>, merger: M) -> Result<Id>
where M: Merger<Id, N>
{
- let node = merger.create_merge_node(self.head.clone(), other.head)?;
+ let node = merger.create_merge_node(&self.head, &other.head)?;
let id = self.backend.put(node).await?;
self.head = id.clone();
Ok(id)
@@ -140,7 +140,7 @@ pub trait Merger<Id, N>
where Id: NodeId,
N: Node<Id = Id>
{
- fn create_merge_node(&self, left_id: Id, right_id: Id) -> Result<N>;
+ fn create_merge_node(&self, left_id: &Id, right_id: &Id) -> Result<N>;
}
@@ -425,16 +425,16 @@ mod tests {
struct M;
impl super::Merger<test::Id, test::Node> for M {
- fn create_merge_node(&self, left_id: test::Id, right_id: test::Id) -> Result<test::Node> {
+ fn create_merge_node(&self, left_id: &test::Id, right_id: &test::Id) -> Result<test::Node> {
Ok(test::Node {
id: test::Id(3),
- parents: vec![left_id, right_id],
+ parents: vec![left_id.clone(), right_id.clone()],
data: 45,
})
}
}
- let merge = tokio_test::block_on(dag.merge(branched, M));
+ let merge = tokio_test::block_on(dag.merge(&branched, M));
assert!(merge.is_ok());
let merge = merge.unwrap();