From e8ea01319b3a9032a3f4f69f65e9ca96562b87b9 Mon Sep 17 00:00:00 2001 From: JSDurand Date: Sun, 22 Jan 2023 11:49:47 +0800 Subject: forest: clone correctly Now the forest can detect if a node is packed or cloned, and correctly clones a node in those circumstances. But it still needs to be tested. --- graph/src/labelled/binary.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'graph/src/labelled') diff --git a/graph/src/labelled/binary.rs b/graph/src/labelled/binary.rs index e3e1943..201dda2 100644 --- a/graph/src/labelled/binary.rs +++ b/graph/src/labelled/binary.rs @@ -551,6 +551,22 @@ impl<'a, T: GraphLabel> BuilderMut for PLGBuilderMut<'a, T> { Ok(()) } + + #[inline] + fn set_label(&mut self, node_id: usize, label: Self::Label) -> Result<(), Error> { + if !self.graph.has_node(node_id) { + return Err(Error::IndexOutOfBounds(node_id, self.nodes_len())); + } + + // node_id is now guaranteed to be valid. + + self.graph.nodes.get_mut(node_id).unwrap().label = label; + + self.graph.label_index_map.remove(&label); + self.graph.label_index_map.insert(label, node_id); + + Ok(()) + } } #[cfg(test)] -- cgit v1.2.3-18-g5258