Compare commits
1 commit
main
...
graph_iter
| Author | SHA1 | Date | |
|---|---|---|---|
| da0e2bac19 |
2 changed files with 17 additions and 2 deletions
|
|
@ -2,7 +2,12 @@ use crate::edge::Edge;
|
||||||
use crate::node::Node;
|
use crate::node::Node;
|
||||||
|
|
||||||
/// operations you might want to do on a graph or on nodes in a graph
|
/// operations you might want to do on a graph or on nodes in a graph
|
||||||
pub trait Graph<N: Node, E: Edge> {
|
pub trait Graph<'g, N: Node + 'g, E: Edge + 'g> {
|
||||||
|
/// return the nodes of a graph
|
||||||
|
fn nodes(&'g self) -> impl Iterator<Item = &'g N>;
|
||||||
|
|
||||||
|
/// return the edges of a graph
|
||||||
|
fn edges(&'g self) -> impl Iterator<Item = &'g E>;
|
||||||
// Connect two nodes, and return the edge
|
// Connect two nodes, and return the edge
|
||||||
// TODO: figure out a way to modify self? is that even needed?
|
// TODO: figure out a way to modify self? is that even needed?
|
||||||
// same for `disconnect()`
|
// same for `disconnect()`
|
||||||
|
|
|
||||||
12
src/test.rs
12
src/test.rs
|
|
@ -2,6 +2,7 @@ use std::collections::{HashMap, HashSet};
|
||||||
|
|
||||||
use crate::{edge::Edge, graph::Graph, node::Node};
|
use crate::{edge::Edge, graph::Graph, node::Node};
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
struct SimpleEdge {
|
struct SimpleEdge {
|
||||||
id: usize,
|
id: usize,
|
||||||
n1: usize,
|
n1: usize,
|
||||||
|
|
@ -12,6 +13,7 @@ impl Edge for SimpleEdge {
|
||||||
type HANDLE = usize;
|
type HANDLE = usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
struct SimpleNode {
|
struct SimpleNode {
|
||||||
id: usize,
|
id: usize,
|
||||||
edges: HashSet<<SimpleEdge as Edge>::HANDLE>,
|
edges: HashSet<<SimpleEdge as Edge>::HANDLE>,
|
||||||
|
|
@ -48,7 +50,15 @@ impl SimpleGraph {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Graph<SimpleNode, SimpleEdge> for SimpleGraph {
|
impl<'g> Graph<'g, SimpleNode, SimpleEdge> for SimpleGraph {
|
||||||
|
fn nodes(&'g self) -> impl Iterator<Item = &'g SimpleNode> {
|
||||||
|
self.nodes.values().into_iter()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn edges(&'g self) -> impl Iterator<Item = &'g SimpleEdge> {
|
||||||
|
self.edges.values().into_iter()
|
||||||
|
}
|
||||||
|
|
||||||
fn connect(&mut self, node_1: usize, node_2: usize) -> usize {
|
fn connect(&mut self, node_1: usize, node_2: usize) -> usize {
|
||||||
let id = self.edges.len();
|
let id = self.edges.len();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue