Compare commits
No commits in common. "graph_iterators" and "main" have entirely different histories.
graph_iter
...
main
2 changed files with 2 additions and 17 deletions
|
|
@ -2,12 +2,7 @@ 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<'g, N: Node + 'g, E: Edge + 'g> {
|
pub trait Graph<N: Node, E: Edge> {
|
||||||
/// 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,7 +2,6 @@ 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,
|
||||||
|
|
@ -13,7 +12,6 @@ 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>,
|
||||||
|
|
@ -50,15 +48,7 @@ impl SimpleGraph {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'g> Graph<'g, SimpleNode, SimpleEdge> for SimpleGraph {
|
impl<'a> Graph<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