From a28d250453fcf1964dc6fa853d5fc34731347fe7 Mon Sep 17 00:00:00 2001 From: Martin Junghanns Date: Fri, 17 Nov 2023 19:34:30 +0100 Subject: [PATCH] Avoid duplication layout application --- crates/builder/src/graph/adj_list.rs | 39 ++++++++++++---------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/crates/builder/src/graph/adj_list.rs b/crates/builder/src/graph/adj_list.rs index 53c072d..5e77c58 100644 --- a/crates/builder/src/graph/adj_list.rs +++ b/crates/builder/src/graph/adj_list.rs @@ -58,25 +58,28 @@ impl AdjacencyList { #[inline] pub(crate) fn insert(&self, source: NI, target: Target) { let mut edges = self.edges[source.index()].write().unwrap(); - - match self.layout { - CsrLayout::Sorted => match edges.binary_search(&target) { - Ok(i) => edges.insert(i, target), - Err(i) => edges.insert(i, target), - }, - CsrLayout::Unsorted => edges.push(target), - CsrLayout::Deduplicated => match edges.binary_search(&target) { - Ok(_) => {} - Err(i) => edges.insert(i, target), - }, - }; + Self::apply_layout(self.layout, &mut edges, target); } #[inline] pub(crate) fn insert_mut(&mut self, source: NI, target: Target) { let edges = self.edges[source.index()].get_mut().unwrap(); + Self::apply_layout(self.layout, edges, target); + } - match self.layout { + #[inline] + fn check_bounds(&self, node: NI) -> Result<(), crate::Error> { + if node >= self.node_count() { + return Err(crate::Error::MissingNode { + node: format!("{}", node.index()), + }); + }; + Ok(()) + } + + #[inline] + fn apply_layout(layout: CsrLayout, edges: &mut Vec>, target: Target) { + match layout { CsrLayout::Sorted => match edges.binary_search(&target) { Ok(i) => edges.insert(i, target), Err(i) => edges.insert(i, target), @@ -88,16 +91,6 @@ impl AdjacencyList { }, }; } - - #[inline] - fn check_bounds(&self, node: NI) -> Result<(), crate::Error> { - if node >= self.node_count() { - return Err(crate::Error::MissingNode { - node: format!("{}", node.index()), - }); - }; - Ok(()) - } } #[derive(Debug)]