diff options
| author | mo khan <mo@mokhan.ca> | 2025-07-02 18:36:06 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-07-02 18:36:06 -0600 |
| commit | 8cdfa445d6629ffef4cb84967ff7017654045bc2 (patch) | |
| tree | 22f0b0907c024c78d26a731e2e1f5219407d8102 /vendor/petgraph/src/traits_graph.rs | |
| parent | 4351c74c7c5f97156bc94d3a8549b9940ac80e3f (diff) | |
chore: add vendor directory
Diffstat (limited to 'vendor/petgraph/src/traits_graph.rs')
| -rw-r--r-- | vendor/petgraph/src/traits_graph.rs | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/vendor/petgraph/src/traits_graph.rs b/vendor/petgraph/src/traits_graph.rs new file mode 100644 index 00000000..272e9e7f --- /dev/null +++ b/vendor/petgraph/src/traits_graph.rs @@ -0,0 +1,73 @@ +use fixedbitset::FixedBitSet; + +use super::EdgeType; + +use super::graph::{Graph, IndexType, NodeIndex}; +#[cfg(feature = "stable_graph")] +use crate::stable_graph::StableGraph; +use crate::visit::EdgeRef; +#[cfg(feature = "stable_graph")] +use crate::visit::{IntoEdgeReferences, NodeIndexable}; + +use super::visit::GetAdjacencyMatrix; + +/// The adjacency matrix for **Graph** is a bitmap that's computed by +/// `.adjacency_matrix()`. +impl<N, E, Ty, Ix> GetAdjacencyMatrix for Graph<N, E, Ty, Ix> +where + Ty: EdgeType, + Ix: IndexType, +{ + type AdjMatrix = FixedBitSet; + + fn adjacency_matrix(&self) -> FixedBitSet { + let n = self.node_count(); + let mut matrix = FixedBitSet::with_capacity(n * n); + for edge in self.edge_references() { + let i = edge.source().index() * n + edge.target().index(); + matrix.put(i); + if !self.is_directed() { + let j = edge.source().index() + n * edge.target().index(); + matrix.put(j); + } + } + matrix + } + + fn is_adjacent(&self, matrix: &FixedBitSet, a: NodeIndex<Ix>, b: NodeIndex<Ix>) -> bool { + let n = self.node_count(); + let index = n * a.index() + b.index(); + matrix.contains(index) + } +} + +#[cfg(feature = "stable_graph")] +/// The adjacency matrix for **Graph** is a bitmap that's computed by +/// `.adjacency_matrix()`. +impl<N, E, Ty, Ix> GetAdjacencyMatrix for StableGraph<N, E, Ty, Ix> +where + Ty: EdgeType, + Ix: IndexType, +{ + type AdjMatrix = FixedBitSet; + + fn adjacency_matrix(&self) -> FixedBitSet { + let n = self.node_bound(); + let mut matrix = FixedBitSet::with_capacity(n * n); + for edge in self.edge_references() { + let i = edge.source().index() * n + edge.target().index(); + matrix.put(i); + if !self.is_directed() { + let j = edge.source().index() + n * edge.target().index(); + matrix.put(j); + } + } + matrix + } + + fn is_adjacent(&self, matrix: &FixedBitSet, a: NodeIndex<Ix>, b: NodeIndex<Ix>) -> bool { + let n = self.node_count(); + let index = n * a.index() + b.index(); + matrix.contains(index) + } +} |
