pub trait GraphEngine {
    // Required methods
    fn count_nodes(&self) -> usize;
    fn remove_node_with_edges(&mut self, node_id: usize);
    fn insert_edge_with_nodes<E: Edge>(&mut self, edge: E) -> EdgeInsertID;
    fn remove_edge<E>(&mut self, edge: E)
       where E: Into<EdgeRemoveAction>;
    fn count_edges(&self) -> usize;

    // Provided methods
    fn exception(&self, ability: &'static str) -> ! { ... }
    fn get_nodes(&self) -> GetNodesVisitor<'_, Self>  { ... }
    fn insert_node(&mut self, node_id: usize) -> usize { ... }
    fn remove_node(&mut self, node_id: usize) { ... }
    fn get_edges(&self) -> GetEdgesVisitor<'_, Self> { ... }
    fn mut_edges(&mut self) -> MutEdgesVisitor<'_, Self> { ... }
    fn insert_edge<E: Edge>(&mut self, edge: E) -> EdgeInsertID { ... }
}
Expand description

Represent a graph storage, with a set of nodes and edges.

Examples

use graph_theory::GraphEngine;

Required Methods§

source

fn count_nodes(&self) -> usize

Count the number of nodes in the graph.

Examples
use graph_theory::GraphEngine;
use graph_theory::CompleteGraph;
assert_eq!(CompleteGraph::new(5).count_nodes(), 5);
source

fn remove_node_with_edges(&mut self, node_id: usize)

Remove the given node and all edges connected to it.

Examples
use graph_theory::GraphEngine;
use graph_theory::adjacency_list::UnGraph;
let mut graph = UnGraph::default();
assert_eq!(graph.count_nodes(), 0);
graph.insert_node(5);
assert_eq!(graph.count_nodes(), 1);
source

fn insert_edge_with_nodes<E: Edge>(&mut self, edge: E) -> EdgeInsertID

Insert edge to graph, if the nodes does not exist, also insert them.

Panics
  • No such ability

Not all graph engine supports insert edge.

Examples
use graph_theory::GraphEngine;
source

fn remove_edge<E>(&mut self, edge: E)where E: Into<EdgeRemoveAction>,

Remove edge by given edge-id or start and end node-id.

Panics
  • No such ability

Not all graph engine supports insert edge.

Examples
use graph_theory::GraphEngine;
source

fn count_edges(&self) -> usize

Count the number of edges in the graph.

Examples
use graph_theory::GraphEngine;
use graph_theory::CompleteGraph;
assert_eq!(CompleteGraph::new(5).count_edges(), 20);

Provided Methods§

source

fn exception(&self, ability: &'static str) -> !

Mark the graph engine does not support the ability.

Currently, we can not detect the ability at compile time, so we use this method to mark the ability is not supported.

source

fn get_nodes(&self) -> GetNodesVisitor<'_, Self>

Arguments
  • index:

returns: Option<CowSelf::Node>

Examples
use graph_theory::GraphEngine;
source

fn insert_node(&mut self, node_id: usize) -> usize

Insert a node without any neighbors (edges).

Examples
use graph_theory::GraphEngine;
use graph_theory::adjacency_list::UnGraph;
let mut graph = UnGraph::default();
assert_eq!(graph.count_nodes(), 0);
graph.insert_node(5);
assert_eq!(graph.count_nodes(), 1);
source

fn remove_node(&mut self, node_id: usize)

Remove the given node.

Undefined Behavior
  • If the node has any edges, the behavior is undefined.

It is recommended to remove all edges before removing the node, see GraphEngine::remove_node_with_edges.

Examples
use graph_theory::GraphEngine;
use graph_theory::adjacency_list::UnGraph;
let mut graph = UnGraph::default();
assert_eq!(graph.count_nodes(), 0);
graph.insert_node(5);
assert_eq!(graph.count_nodes(), 1);
source

fn get_edges(&self) -> GetEdgesVisitor<'_, Self>

source

fn mut_edges(&mut self) -> MutEdgesVisitor<'_, Self>

Arguments
  • index:

returns: Option<CowSelf::Node>

Examples
use graph_theory::GraphEngine;
source

fn insert_edge<E: Edge>(&mut self, edge: E) -> EdgeInsertID

Insert a edge between two nodes.

Undefined Behaviors
  • If the nodes does not exist, the behavior is undefined.

It is recommended to check the existence of the nodes before inserting the edge, see GraphEngine::insert_edge_with_nodes.

  • Insert undirected edge to directed graph.

Two edges will be inserted, but only return last edge’s id.

Panics
  • No such ability

Not all graph engine supports insert edge.

  • Insert disconnected edge

Meaningless, don’t do that.

Examples
use graph_theory::GraphEngine;

Implementors§