Struct Graph

Source
pub struct Graph<I: Index, NL: Label, EL: Label> {
    pub nodes: Vec<Node<I, NL>>,
    pub edges: Vec<Edge<I, EL>>,
}
Expand description

A Graph is in principle a owning tuple of Nodes and Edges.

Fields§

§nodes: Vec<Node<I, NL>>§edges: Vec<Edge<I, EL>>

Implementations§

Source§

impl<I: Index, NL: Label, EL: Label> Graph<I, NL, EL>

Source

pub fn contains_edge_with_ids(&self, edge: &(I, I)) -> bool

Source

pub fn contains_node_with_id(&self, node: &I) -> bool

Source

pub fn get_node_by_id(&self, idx: &I) -> Option<&Node<I, NL>>

Source

pub fn neighbours(&self, nodeid: &I) -> Vec<Node<I, NL>>

Returns all nodes connected to the given node id

Source

pub fn cleanup_edges(&mut self)

Removes edges that either come from or incident on invalid nodes.

§Examples
use graphlang::{Node,Edge,Graph,are_graphs_isomorph};
let mut graph = Graph {
        nodes: vec![ Node::new(0u32, "a"), Node::new(1, "a") ],
        edges: vec![ Edge::new_unlabeled(0, 1), Edge::new_unlabeled(0, 2), Edge::new_unlabeled(2, 3) ] };
let reference = Graph {
        nodes: vec![ Node::new(0u32, "a"), Node::new(1, "a") ],
        edges: vec![ Edge::new_unlabeled(0, 1) ] };

graph.cleanup_edges();
assert_eq!(&reference, &graph );
Source

pub fn insert(&mut self, g: &Self)

Assumes that the mapping between it and the graph is the identity. So Node(1) in g adds Node(1) in self. If this is not desired apply an isomorphism explicitly using translate_copy. If then node already exists it replaces the label.

Source

pub fn remove(&mut self, g: &Self)

Assumes that the mapping between it and the graph is the identity. So Node(1) in g removes Node(1) in self. If this is not desired apply an isomorphism explicitly using translate_copy If then node does not exists it skips it.

Source

pub fn translate(&mut self, g: &Isomorphism<I>) -> bool

Modifies a graph inplace by translating all ids using an isomorphism. If it contains nodes that are not covered by the isomorphism they are not modified, which can lead to invalid graphs. This behaviour should be reconsidered.

Source

pub fn translate_copy(&self, g: &Isomorphism<I>) -> Self

Returns a graph, that gets translated by an isomorphism. If it contains nodes that are not covered by the isomorphism they are not modified, which can lead to invalid graphs. This behaviour should be reconsidered.

Source§

impl<I: Index, NL: Label, EL: Label> Graph<I, NL, EL>

Source

pub fn write_dot_to<W: Write>(&self, output: &mut W) -> Result<()>

Write graph using the dot-format to output. It can be easily visualized using graphviz

§Examples
use graphlang::Graph;
let graph: Graph<_,_,_> = create_graph_somehow();
let mut f = std::fs::File::create("Example.dot")?;
graph.write_dot_to(&mut f)?;
§Errors

Trait Implementations§

Source§

impl<'a, I: Index, NL: Label, EL: Label> Add for &'a Graph<I, NL, EL>

Source§

type Output = Graph<I, NL, EL>

The resulting type after applying the + operator.
Source§

fn add(self, rhs: Self) -> Self::Output

Performs the + operation. Read more
Source§

impl<I: Index, NL: Label, EL: Label> Add for Graph<I, NL, EL>

Source§

type Output = Graph<I, NL, EL>

The resulting type after applying the + operator.
Source§

fn add(self, rhs: Self) -> Self::Output

Performs the + operation. Read more
Source§

impl<I: Clone + Index, NL: Clone + Label, EL: Clone + Label> Clone for Graph<I, NL, EL>

Source§

fn clone(&self) -> Graph<I, NL, EL>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<I: Debug + Index, NL: Debug + Label, EL: Debug + Label> Debug for Graph<I, NL, EL>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de, I, NL, EL> Deserialize<'de> for Graph<I, NL, EL>
where I: Deserialize<'de> + Index, NL: Deserialize<'de> + Label, EL: Deserialize<'de> + Label,

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<I: Index> From<Graph<I, &str, ()>> for Graph<I, String, ()>

Source§

fn from(g: Graph<I, &str, ()>) -> Self

Converts to this type from the input type.
Source§

impl<'a, I: Index, NL: Label, EL: Label> GraphWalk<'a, Node<I, NL>, Edge<I, EL>> for Graph<I, NL, EL>

Source§

fn nodes(&'a self) -> Nodes<'a, Node<I, NL>>

Returns all the nodes in this graph.
Source§

fn edges(&'a self) -> Edges<'a, Edge<I, EL>>

Returns all of the edges in this graph.
Source§

fn source(&self, e: &Edge<I, EL>) -> Node<I, NL>

The source node for edge.
Source§

fn target(&self, e: &Edge<I, EL>) -> Node<I, NL>

The target node for edge.
Source§

impl<'a, I: Index, NL: Label, EL: Label> Labeller<'a, Node<I, NL>, Edge<I, EL>> for Graph<I, NL, EL>

Source§

fn graph_id(&'a self) -> Id<'a>

Must return a DOT compatible identifier naming the graph.
Source§

fn node_id(&'a self, n: &Node<I, NL>) -> Id<'a>

Maps n to a unique identifier with respect to self. The implementer is responsible for ensuring that the returned name is a valid DOT identifier.
Source§

fn node_shape(&'a self, _node: &N) -> Option<LabelText<'a>>

Maps n to one of the graphviz shape names. If None is returned, no shape attribute is specified.
Source§

fn node_label(&'a self, n: &N) -> LabelText<'a>

Maps n to a label that will be used in the rendered output. The label need not be unique, and may be the empty string; the default is just the output from node_id.
Source§

fn edge_label(&'a self, e: &E) -> LabelText<'a>

Maps e to a label that will be used in the rendered output. The label need not be unique, and may be the empty string; the default is in fact the empty string.
Source§

fn node_style(&'a self, _n: &N) -> Style

Maps n to a style that will be used in the rendered output.
Source§

fn node_color(&'a self, _node: &N) -> Option<LabelText<'a>>

Maps n to one of the graphviz color names. If None is returned, no color attribute is specified.
Source§

fn edge_end_arrow(&'a self, _e: &E) -> Arrow

Maps e to arrow style that will be used on the end of an edge. Defaults to default arrow style.
Source§

fn edge_start_arrow(&'a self, _e: &E) -> Arrow

Maps e to arrow style that will be used on the end of an edge. Defaults to default arrow style.
Source§

fn edge_style(&'a self, _e: &E) -> Style

Maps e to a style that will be used in the rendered output.
Source§

fn edge_color(&'a self, _e: &E) -> Option<LabelText<'a>>

Maps e to one of the graphviz color names. If None is returned, no color attribute is specified.
Source§

fn kind(&self) -> Kind

The kind of graph, defaults to Kind::Digraph.
Source§

impl<I: Index, NL: Label, EL: Label> PartialEq for Graph<I, NL, EL>

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<I, NL, EL> Serialize for Graph<I, NL, EL>
where I: Serialize + Index, NL: Serialize + Label, EL: Serialize + Label,

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<'a, I: Index, NL: Label, EL: Label> Sub<&'a [I]> for &'a Graph<I, NL, EL>

Source§

type Output = Graph<I, NL, EL>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: &'a [I]) -> Self::Output

Performs the - operation. Read more
Source§

impl<'a, I: Index, NL: Label, EL: Label> Sub for &'a Graph<I, NL, EL>

Source§

type Output = Graph<I, NL, EL>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: Self) -> Self::Output

Performs the - operation. Read more
Source§

impl<I: Index, NL: Label, EL: Label> Sub for Graph<I, NL, EL>

Source§

type Output = Graph<I, NL, EL>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: Self) -> Self::Output

Performs the - operation. Read more

Auto Trait Implementations§

§

impl<I, NL, EL> Freeze for Graph<I, NL, EL>

§

impl<I, NL, EL> RefUnwindSafe for Graph<I, NL, EL>

§

impl<I, NL, EL> Send for Graph<I, NL, EL>
where I: Send, NL: Send, EL: Send,

§

impl<I, NL, EL> Sync for Graph<I, NL, EL>
where I: Sync, NL: Sync, EL: Sync,

§

impl<I, NL, EL> Unpin for Graph<I, NL, EL>
where I: Unpin, NL: Unpin, EL: Unpin,

§

impl<I, NL, EL> UnwindSafe for Graph<I, NL, EL>
where I: UnwindSafe, NL: UnwindSafe, EL: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,