WIP: add iterators for edges + nodes.
NOTE: i don't like how the lifetimes worked out in the trait definitions
This commit is contained in:
parent
114176202f
commit
da0e2bac19
2 changed files with 17 additions and 2 deletions
|
|
@ -2,7 +2,12 @@ use crate::edge::Edge;
|
|||
use crate::node::Node;
|
||||
|
||||
/// 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
|
||||
// TODO: figure out a way to modify self? is that even needed?
|
||||
// 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};
|
||||
|
||||
#[derive(Clone)]
|
||||
struct SimpleEdge {
|
||||
id: usize,
|
||||
n1: usize,
|
||||
|
|
@ -12,6 +13,7 @@ impl Edge for SimpleEdge {
|
|||
type HANDLE = usize;
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct SimpleNode {
|
||||
id: usize,
|
||||
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 {
|
||||
let id = self.edges.len();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue